C# 尝试使用ViewModel发布时引用为空

C# 尝试使用ViewModel发布时引用为空,c#,asp.net-mvc-5,C#,Asp.net Mvc 5,目前我有一个ViewModel,它由两个模型列表组成。使用ViewModel显示内容是可以的,但是当我尝试发布时,会出现空引用异常 public class DashboardViewModel { public IList<DashboardModel> dashboard { get; set; } public IList<WidgetModel> widgets { get; set; } } 空引用发生在AddDashboard操作中。我设置了

目前我有一个ViewModel,它由两个模型列表组成。使用ViewModel显示内容是可以的,但是当我尝试发布时,会出现空引用异常

public class DashboardViewModel
{
    public IList<DashboardModel> dashboard { get; set; }
    public IList<WidgetModel> widgets { get; set; }
}

空引用发生在AddDashboard操作中。我设置了一个断点,并意识到dashboardVM为空,dashboard属性为空

您的
[Bind]
属性导致
dashboard
(和
小部件
)属性保持为空,因为在
包含
列表中未包含
仪表板

尝试从操作参数中删除
[Bind]
,并将其放置在
仪表板模型
本身上:

[Bind(Include = "DashID,DashName,CreatedBy,CreatedDate")]
public class DashboardModel
{
    // ...
}

请参见您的
HttpPost
操作正在接收一个
DashboardViewModel
,该DashboardModel在内部包含一组
DashboardModel

但是,您传递的不是任何内容的集合,而是单个
仪表板模型

更新操作以接受
仪表板模型

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddDashboard([Bind(Include = "DashID,DashName,CreatedBy,CreatedDate")] DashboardModel dashboardVM)
{
    ...
}

注意:
[Bind]
属性可能需要调整;您尚未提供
仪表板模型
类的定义。

您没有生成与模型无关的控件。属性
dashboard
是一个集合,因此您需要为
循环生成
中的控件(或为
DashboardModel
类型使用自定义
EditorTemplate
),因为您没有发回列表。将post操作更改为接受仪表板模型。
@Html.EditorFor(model=>model.dashboard.Last().DashName,
将不会像
那样工作。Last()
是一个
IEnumerable
,因此是只读的。请查看生成的Html。为了绑定控件,您需要将其删除
[绑定]
attribute@BrendanGreen这解决了我的问题谢谢,你想把它作为一个答案,这样我可以给你一个绿色的勾号吗?我已经按照你的指示做了,但是这似乎并没有解决我的问题这似乎只是问题的一部分,另一个问题与你使用
EditorFor()有关
。稍后将对此进行研究
[Bind(Include = "DashID,DashName,CreatedBy,CreatedDate")]
public class DashboardModel
{
    // ...
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult AddDashboard([Bind(Include = "DashID,DashName,CreatedBy,CreatedDate")] DashboardModel dashboardVM)
{
    ...
}