MVC - 将多个数据表传递给视图

Pau*_*els 7 c# linq asp.net-mvc asp.net-mvc-viewmodel

我目前在我的MVC项目的HomeController中有以下代码:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        MyDataContext dc = new MyDataContext();

        IQueryable<Table1Data> j =
            from n in dc.Table1                     
            select n;

        return View(j);
    }
Run Code Online (Sandbox Code Playgroud)

这样可行,但现在我想将第二个表传递到同一个视图.所以我在想我应该能做这样的事情:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        MyDataContext dc = new MyDataContext();

        IQueryable<Table1Data> j =
            from n in dc.Table1                     
            select n;

        IQueryable<Table2Data> l =
            from k in dc.Table2        
            select k;

        return View(j, l);
    }
Run Code Online (Sandbox Code Playgroud)

有没有办法有观点接受两个模型是这样,或者,一个方法来合并两个结果集(这两个表没有以任何方式联系?

Pat*_*her 16

是的,但不是那样的.执行您希望执行的操作的方法是创建自定义ViewModel类.此类(MyPageViewModel)将具有两个(或更多)属性,每个对象一个.在您的视图中,您可以使用Model.Table1Data和访问它们Model.Table2Data.

一个自定义的ViewModel类简单的:

public class MyPageViewModel
{
   public IQueryable<Table1Data> Table1Data { get; set; }
   public IQueryable<Table2Data> Table2Data { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

需要对此自定义ViewModel类进行强类型查看.

<%@ Page Title="MyPage" MasterPageFile="~/Application/Master Pages/Site.Master"
    Inherits="System.Web.Mvc.ViewPage(Of MyAppNamespace.MyPageViewModel)" %>
Run Code Online (Sandbox Code Playgroud)

不要试图自己输入; 更容易创建新视图并检查"强类型"视图,并指定New Custom Viewmodel类.

然后你的动作控制器方法将是:

public class HomeController : Controller
{
  public ActionResult Index()
  {
    MyDataContext dc = new MyDataContext();

    MyPageViewModel vm = new MyPageViewModel();

    vm.Table1Data =  from n in dc.Table1                     
                     select n;

    vm.Table1Data = from k in dc.Table2        
                    select k;

    return View(vm);
  }
}
Run Code Online (Sandbox Code Playgroud)