我创建了一个视图来编辑我的模型。视图是强类型的,有一次我会执行以下操作:
@for (int i = 0; i < Model.Risks.Count; i++)
{
@Html.EditorFor(m => Model.Risks[i]))
}
现在,如果集合不为空,即如果我编辑现有实体,这可以正常工作。
但是我想使用这个相同的视图来创建一个新实体。但由于集合为空,它会崩溃。如何确保它呈现编辑器?
我创建了一个视图来编辑我的模型。视图是强类型的,有一次我会执行以下操作:
@for (int i = 0; i < Model.Risks.Count; i++)
{
@Html.EditorFor(m => Model.Risks[i]))
}
现在,如果集合不为空,即如果我编辑现有实体,这可以正常工作。
但是我想使用这个相同的视图来创建一个新实体。但由于集合为空,它会崩溃。如何确保它呈现编辑器?
只需使用 EditorTemplate 并摆脱视图中的任何循环:
@Html.EditorFor(m => m.Risks)
现在 ASP.NET MVC 将在运行时检测集合是否为空且不执行任何操作,或者它是否具有值,它将自动为集合的每个元素呈现相应的编辑器模板。这样一来,您就可以用一块石头杀死两只鸟了:您的代码要容易得多,而且您不需要进行任何测试 => 您将此任务留给 ASP.NET MVC 框架。
一种方法是在模型是新的时候设置默认值。
public IList<Risk> Risks {
get {
return IsNew() ? DefaultRisks() : risks;
}
set {
risks = value;
}
}
然后可以在视图中使用属性 IsNew,例如按钮文本“创建”或“保存”
如果你最终在你的视图中有太多的 if 语句,最好将它们分开。
话虽如此,拥有相同的演示模型并不是一件坏事。