ASP.NET MVC使用相同的视图进行编辑和创建

时间:2013-02-07 13:48:09

标签: asp.net-mvc-4 edit

我创建了一个用于编辑模型的视图。视图是强类型的,我一度做到以下几点:

    @for (int i = 0; i < Model.Risks.Count; i++)
    {   
        @Html.EditorFor(m => Model.Risks[i]))
    }

现在,如果集合不为null,即如果我编辑现有实体,则此工作正常。

但是,我想使用相同的视图来创建新的实体。但是由于集合为空,它崩溃了。如何确保它呈现编辑器?

2 个答案:

答案 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框架。