2013-02-07 54 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

相關問題