2010-03-12 29 views
2

我注意到,如果沒有模型,比如當我有一個CreateEdit ViewUserControl時,TextBoxFor helper渲染爲空。在「編輯」視圖中填充字段時,「創建」字段爲空但仍呈現。ASP.NET MVC TextBoxFor幫手渲染爲空時爲空

問題是TextBoxFor不接受其名稱不同的Id(與LabelFor等人相同,但對於LabelFor我有自定義Html助手)。

所以在某些情況下,我們仍然需要使用常規的Html.TextBox助手。問題是如果我寫這個

<%=Html.TextBox("postname", Model.PostCode.postname, new { @class = "postsDropDown" })%> 

在創建視圖(顯然)發生錯誤。

所以,我必須這樣做:

<% if (Model != null) %> 
    <%=Html.TextBox("postname", Model.PostCode.postname, new { @class = "postsDropDown" })%> 
    <% else %> 
    <%=Html.TextBox("postname", null, new { @class = "postsDropDown" })%> 

現在是一些東西,我不喜歡了(中頻的)。

這是唯一的方法嗎?我知道我可以擴展TextBoxFor幫手,但似乎很麻煩。最後,我們將擴展所有「For」助手,但我認爲這應該由ASP.NET MVC團隊完成(內置)。

+0

請幫助我理解助手如何解決問題,就像現在的情況一樣現在的問題是在評估Model.PostCode時Model是null,所以即使我們編寫一個幫助程序,然後如果我們仍然使用Model.PostCode,那麼即使在調用助手之前,它也會在評估中拋出一個錯誤。 – 2010-03-12 11:40:27

+0

在我看來,這是一個設計問題,應該沒有理由讓模型 – 2010-03-12 11:56:13

+1

@matt:當我們在創建視圖時,模型顯然是空的,因爲我們正在創建一個實體的新實例,我沒有看到這可能會有什麼不同,爲模型提供一個空對象將是設計問題,我想 – mare 2010-03-12 12:52:14

回答

0

如果Modelnull,然後試圖訪問Model.PostCode.postname將拋出一個NullReferenceException,所以我不認爲你可以將其固定TextBoxFor。你可以嘗試像Model != null && Model.PostCode != null ? Model.PostCode.postname : null這樣的東西,但它很討厭:-(