2013-02-07 52 views
1

我创建了一个视图来编辑我的模型。的看法是强类型和在一个点上我做了以下内容:ASP.NET MVC使用相同的视图来编辑和创建

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

现在,这是工作的罚款,如果集合如果我编辑现有的实体不为空,即。

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

回答

0

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

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

有是否新款然后可以在例如按钮文本视图中使用的属性“创建”或“保存”

如果你结束了太多,如果在你看来声明这将是最好的分开他们。

这就是说具有相同的演示模型并不是一件坏事。

0

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

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

现在ASP.NET MVC将在运行时检测,如果集合是空的,什么也不做,或者如果它有值,它会自动为集合的每个元素渲染相应的编辑器模板。通过这种方式,您可以一箭双雕:您的代码非常简单,您无需进行任何测试=>您将此任务留给了ASP.NET MVC框架。

+0

达林,你是否暗示循环应该放在EditorTemplate中?所以,如果风险集合是空的,那么它将不会被渲染。好的,但是如果我想创造一个新的风险呢?我需要在屏幕上呈现一些空的控件。 – Sam

+0

@ user1098555,我暗示你不应该使用任何循环。摆脱它。 ASP.NET MVC将自动识别风险是一个集合,并为该集合的每个元素呈现相应的编辑器模板。它会为你做,这样你就不必编写任何循环。你所要做的就是把'@ Html.EditorFor(m => m.Risks)'放在我的答案中。 –

+0

我需要一个循环,因为我在ViewModel中使用继承,并且编辑器模板应该根据集合中Risk的类型而不同。是否有意义 ? – Sam

相关问题