在一个视图中组合多个模型

时间:2012-09-19 07:34:28

标签: asp.net-mvc-3

我对此处提供的接受答案有一个跟进问题:Two models in one view in ASP MVC 3

我有三个模型,类型,原因,位置,我想列出一个视图中的内容。基于上面链接中的答案,我创建了一个新模型,结合了如下所示:

public class Combined
    {
        public IEnumerable<Place> Place { get; set; }
        public IEnumerable<Type> Type { get; set; }
        public IEnumerable<Cause> Cause { get; set; }
    }

我做了IEnumerable&lt;&gt;因为据我所知,当我只想在foreach循环中列出这些模型的内容时,这就是我想要的。然后我为视图制作了这个控制器:

[ChildActionOnly]
    public ActionResult overSightHeadings()
    {
        Combined Combined = new Combined();
        return View(Combined);
    }

最后是视图(我只想先从其中一个表中列出):

@model mvcAvvikelser.Models.Combined
@{
    Layout = null;
}
<tr>
@foreach (var Type in Model.Type)
{
    <th> @Html.DisplayTextFor(ModelItem => Type.Name)</th>
}
</tr>

此代码的问题是它在foreach代码启动时抛出一个null异常。

System.NullReferenceException: Object reference not set to an instance of an object.

所以我不完全确定我在这里做错了,如果它不是IEnumerable,我是否在控制器中错误地初始化了模型?

2 个答案:

答案 0 :(得分:1)

应该是这个

[ChildActionOnly]
public ActionResult overSightHeadings()
{
    Combined combined = new Combined();
    combined.Types = new List<Type>();
    combined.Causes = new List<Cause>();
    combined.Places = new List<Place>();

    return View(Combined);
}

请注意,我已将属性名称更改为复数。这将您的财产定义为集合。

答案 1 :(得分:0)

看起来像

 public IEnumerable<Type> Type { get; set; }

未设置

尝试在模型构造函数中初始化此列表 没有IEnumerable 像

 List<Type> Type = new List<Type>();