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