C# 尝试使用ViewModel发布时引用为空
目前我有一个ViewModel,它由两个模型列表组成。使用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操作中。我设置了
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)
{
...
}