如何将加入的 table 传递给 MVC 中的视图?
How to pass a joined table to a view in MVC?
我正在用 Mvc 构建一个项目,但遇到了一些问题。之前无数次接触过viewmodels,Controller-View的关系,但是这个问题一直难倒我
我想将连接的 table 传递给视图,但我不确定该怎么做。
这是查询代码
var query1 =
from r in db.Requests
group r by r.RequestNum into rsg
select new
{
rsg,
TechHrsSum = (from rr in rsg select rr.RequestSteps.Select ( rs => rs.Procedure.TechHrs).Sum(h => h)),
ProcessHrsSum = (from rr in rsg select rr.RequestSteps.Select ( rs => rs.Procedure.ProcessHrs).Sum(h => h))
};
我知道这是匿名的,但我不明白如何传递数据以使其在视图中动态可用。谢谢!
您的选择是创建一个 class 对象,该对象具有要传递给视图的值的属性。或者您可以将对象放入 ViewBag 并通过它访问值。我会推荐第一个选项。
您有多种选择,但您的评论可能不准确。
How to pass a joined table to a Model View Controller View.
您传递的不是传统意义上的 table,而是一系列建模数据。建模数据将表示从数据库中检索到的数据结构。这是模型视图控制器的全部前提,以体现超文本传输协议无状态性质的方式抽象数据。
最简单的方法是在模型将如何用于您的 back-end 以及您的用户界面的上下文中定义您的模型。
I've got a Billing object, it requires the following information:
- Person
- Account
- Address
- Total
正如你所看到的Billing
对象,虽然它只是简单定义,但我们的上下文开始体现实现,因此真正的形状开始定义。为了简单起见,我将模拟一个简单的模型:
// Example Model:
public class Person
{
public string FirstName { get; set; }
public string LastName {get; set; }
}
所以定义了一个Person的前提,每当我的View需要显示一个Person 我总是需要定义以下内容。
重要提示:定义模型后,我们知道我们的数据层将需要填充建模数据和我们的业务逻辑 将与这些实体一起工作。为简单起见,线性方法:
// Controller:
public ActionResult Index(int? id)
{
// Person Model:
var model = new Person();
// Call Database Method, to populate Model
model = dbPerson.Fill(id); // dbPerson.Fill would be a method to populate.
return View(model);
}
// View: (Index of our Controller)
@if(Model != null)
{
foreach(var content in Model)
{
<div>@content.FirstName</div>
<div>@content.LastName</div>
}
}
通过在我们的 Collection 中声明 var
,类型将在编译时定义。
这就是您传输数据的方式。这种基本方法适用于更复杂的对象。特别是因为您的 Table View 可以包含任何对象,所以它可以显示。希望这能澄清一点。
我可能误解了您的意图,但我相信您正在为整体概念而苦苦挣扎。请记住,模型视图控制器代表:
一个非常简单的想法是将模型更改为具有来自其他表的信息的 "NotMapped" 列(假设一对一关系):所以在模型中:
[NotMapped]
public string myStringVar { get; set; }
然后在控制器中:
ourTableModel.myStringVar = ""; // default
if (ourTableModel.ourTableModel_key != null)
{
var ourOtherTable = db.otherTable.Find(ourTableModel.ourTableModel_key);
if (ourOtherTable != null)
{
ourTableModel.myStringVar = ourOtherTable.stringInOtherTable;
}
}
只要这是一个 R(检索或读取)操作,就可以像其他任何操作一样轻松地在视图中显示,相反,如果正在进行 CUD 操作,则可以通过策略将其保存在控制器中。
我正在用 Mvc 构建一个项目,但遇到了一些问题。之前无数次接触过viewmodels,Controller-View的关系,但是这个问题一直难倒我
我想将连接的 table 传递给视图,但我不确定该怎么做。
这是查询代码
var query1 =
from r in db.Requests
group r by r.RequestNum into rsg
select new
{
rsg,
TechHrsSum = (from rr in rsg select rr.RequestSteps.Select ( rs => rs.Procedure.TechHrs).Sum(h => h)),
ProcessHrsSum = (from rr in rsg select rr.RequestSteps.Select ( rs => rs.Procedure.ProcessHrs).Sum(h => h))
};
我知道这是匿名的,但我不明白如何传递数据以使其在视图中动态可用。谢谢!
您的选择是创建一个 class 对象,该对象具有要传递给视图的值的属性。或者您可以将对象放入 ViewBag 并通过它访问值。我会推荐第一个选项。
您有多种选择,但您的评论可能不准确。
How to pass a joined table to a Model View Controller View.
您传递的不是传统意义上的 table,而是一系列建模数据。建模数据将表示从数据库中检索到的数据结构。这是模型视图控制器的全部前提,以体现超文本传输协议无状态性质的方式抽象数据。
最简单的方法是在模型将如何用于您的 back-end 以及您的用户界面的上下文中定义您的模型。
I've got a Billing object, it requires the following information:
- Person
- Account
- Address
- Total
正如你所看到的Billing
对象,虽然它只是简单定义,但我们的上下文开始体现实现,因此真正的形状开始定义。为了简单起见,我将模拟一个简单的模型:
// Example Model:
public class Person
{
public string FirstName { get; set; }
public string LastName {get; set; }
}
所以定义了一个Person的前提,每当我的View需要显示一个Person 我总是需要定义以下内容。
重要提示:定义模型后,我们知道我们的数据层将需要填充建模数据和我们的业务逻辑 将与这些实体一起工作。为简单起见,线性方法:
// Controller:
public ActionResult Index(int? id)
{
// Person Model:
var model = new Person();
// Call Database Method, to populate Model
model = dbPerson.Fill(id); // dbPerson.Fill would be a method to populate.
return View(model);
}
// View: (Index of our Controller)
@if(Model != null)
{
foreach(var content in Model)
{
<div>@content.FirstName</div>
<div>@content.LastName</div>
}
}
通过在我们的 Collection 中声明 var
,类型将在编译时定义。
这就是您传输数据的方式。这种基本方法适用于更复杂的对象。特别是因为您的 Table View 可以包含任何对象,所以它可以显示。希望这能澄清一点。
我可能误解了您的意图,但我相信您正在为整体概念而苦苦挣扎。请记住,模型视图控制器代表:
一个非常简单的想法是将模型更改为具有来自其他表的信息的 "NotMapped" 列(假设一对一关系):所以在模型中:
[NotMapped]
public string myStringVar { get; set; }
然后在控制器中:
ourTableModel.myStringVar = ""; // default
if (ourTableModel.ourTableModel_key != null)
{
var ourOtherTable = db.otherTable.Find(ourTableModel.ourTableModel_key);
if (ourOtherTable != null)
{
ourTableModel.myStringVar = ourOtherTable.stringInOtherTable;
}
}
只要这是一个 R(检索或读取)操作,就可以像其他任何操作一样轻松地在视图中显示,相反,如果正在进行 CUD 操作,则可以通过策略将其保存在控制器中。