如何将加入的 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 操作,则可以通过策略将其保存在控制器中。