MVC在一个视图中使用父级模型的多个模型

问题描述:

我试图在本页的“使用ViewModel传递多个模型”部分之后向我的索引页添加第二个模型(包含2个部分视图作为两列页面) :http://www.codeproject.com/Articles/687061/Using-Multiple-Models-in-a-View-in-ASP-NET-MVC-MMVC在一个视图中使用父级模型的多个模型

香港专业教育学院创建了一个模型,以保持所谓MasterModel这是我想保存我的其他车型

public class MasterModel 
{ 
    public UserInfo UserInfo { get; set; } 
    public LogDataServerDBEntities LogDataServerDBEntities { get; set; } 
} 

在我的索引,_NewRequest _ExistingRequest页我从

@model IEnumerable<TMTMonitorandCompare.Models.UserInfo> 
改变模型中的其他2

@model IEnumerable<TMTMonitorandCompare.Models.MasterModel> 

,并改变了我的数据显示为 “Model.UserInfo”

@if (Model.UserInfo != null) 
{ 
    foreach (var item in Model.UserInfo) 
     { 
      <tr> 
      <td> 
      <input type="checkbox" class="checks"> 
      </td> 

      <td class="modal2row" data-toggle="modal" data-id="1" data-target="#basicModal3"> 
        @Html.DisplayFor(modelItem => item.CreationDateTime) 
      </td> 

      <td class="modal2row" data-toggle="modal" data-id="1" data-target="#basicModal3"> 
       @Html.DisplayFor(modelItem => item.AppModeId) 
      </td> 

     </tr> 
     } 
} 

ControllerMethod:

[HttpGet] 
    public ActionResult Index(string filtername) 
    { 
     var filterresults = from m in db.UserInfoes 
          select m; 

     filterresults = filterresults.Where(x => x.UserCode.ToString().Contains(filtername)).OrderBy(x => x.UserCode); 
     CheckDownloaded(); 
     PopulateViewbag(); 

     return View(filterresults); 
    } 

只有现在我得到的错误:

错误1'System.Collections.Generic.IEnumerable'不包含一个'UserInfo'的定义并且没有扩展方法'UserInfo'接受类型'System.Collections.Generic.IEnumerable'的第一个参数可以找到(你是否缺少使用指令或程序集引用?)

任何人都可以解释对我来说,我在哪里/出什么问题?

+0

你能不能请张贴控制器代码,并告诉你如何构建模型对象(MasterModel) – Thangadurai 2014-09-19 10:55:21

+0

不知道这可能是一个问题,但作为一种实践,它不是adviceable使用相同的类名作为属性名称[public UserInfo UserInfo {get;组; }] – Thangadurai 2014-09-19 10:57:55

+1

@Baggerz,我回滚了你的编辑 - 你完全不能改变这个问题。只需在注释中添加我要求的代码 – 2014-09-19 11:10:27

UserInfoMasterModel(不是集合)中的对象。我怀疑你想要的是

public class MasterModel 
{ 
    public List<UserInfo> UserInfo { get; set; } 
    .... 
} 

,并在主视图

@model TMTMonitorandCompare.Models.MasterModel 

那么你可以使用

foreach (var item in Model.UserInfo) 
{ 
    .... 

编辑

基于从OP其他信息,操作方法需要更改以匹配模型

[HttpGet] 
public ActionResult Index(string filtername) 
{ 
    var filterresults = from m in db.UserInfoes select m; 
    filterresults = filterresults.Where(x => x.UserCode.ToString().Contains(filtername)).OrderBy(x => x.UserCode); 
    .... 
    MasterModel model = new MasterModel(); 
    model.UserInfo = filterresults; 
    // set other properties of model as required 
    return View(model); 
} 
+0

感谢您对Stephan的帮助,在进行更改之后,Visual Studio中的错误消失。我还将部分视图更改为具有相同的@model语句,但运行解决方案时出现此错误: System.InvalidOperationException:传递到字典中的模型项类型为'System.Data.Entity.Infrastructure。 DbQuery'1 [TMTMonitorandCompare.Models.UserInfo]'),但是这个字典需要一个'TMTMonitorandCompare.Models.MasterModel'类型的模型项。 – Baggerz 2014-09-19 11:01:41

+0

编辑你的问题,包括控制器方法 - 你似乎没有传递正确的对象到视图 - 它应该像'MasterModel model = new MasterModel(); model.UserInfo = someCollection;返回查看(模型);' – 2014-09-19 11:05:42

+0

我没有在我的代码中,我建立了我的上面的索引方法。 – Baggerz 2014-09-19 11:09:45