1

我创建了一个视图来编辑我的模型。视图是强类型的,有一次我会执行以下操作:

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

现在,如果集合不为空,即如果我编辑现有实体,这可以正常工作。

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

4

2 回答 2

0

只需使用 EditorTemplate 并摆脱视图中的任何循环:

@Html.EditorFor(m => m.Risks)

现在 ASP.NET MVC 将在运行时检测集合是否为空且不执行任何操作,或者它是否具有值,它将自动为集合的每个元素呈现相应的编辑器模板。这样一来,您就可以用一块石头杀死两只鸟了:您的代码要容易得多,而且您不需要进行任何测试 => 您将此任务留给 ASP.NET MVC 框架。

于 2013-02-07T14:11:09.453 回答
0

一种方法是在模型是新的时候设置默认值。

public IList<Risk> Risks {
  get {
      return IsNew() ? DefaultRisks() : risks;
  }
  set {
    risks = value;
  }
}

然后可以在视图中使用属性 IsNew,例如按钮文本“创建”或“保存”

如果你最终在你的视图中有太多的 if 语句,最好将它们分开。

话虽如此,拥有相同的演示模型并不是一件坏事。

于 2013-02-07T13:55:21.980 回答