2011-06-30 28 views
24

好吧,我剛剛在MVC中發現了EditorForModel,我想知道什麼時候應該使用它而不是EditorFor對我的每個屬性?爲什麼當我添加一個強類型視圖時,它不會使用這個視圖並在每個屬性上構建EditorFor爲什麼不使用Html.EditorForModel()

我遲到了......但感謝您的信息!

+1

請看看Brad Wilson的[博客文章(HTTP:// bradwilson。 typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-1-introduction.html) –

回答

3

您應該儘可能使用它,但有時您需要單獨使用Html.EditorFor的可定製性。

至於爲什麼內置模板不使用它,主要是因爲它們通常很傻,但也因爲如果我記得它們需要在每個Html.EditorFor周圍包裝元素(如表格行等) 。

-5

我從來沒有使用過EditorFor,也沒有想過將來會使用它。 EditorFor假定它知道你想要什麼。你知道當你假設什麼時會發生什麼。

也許如果你正在做一個快速Mvc秒殺測試別的東西你可能會使用EditorFor。

+0

您可以通過添加EditorTemplates自己編輯「保證」。這就是.cshtml文件,運行EditorFor方法時運行。 F.eks。如果EditorFor中的輸入是DateTime,則運行DateTime.cshtml。 –

+1

DateTime是爲什麼我不使用EditorFor的一個很好的例子。DateTime可以僅爲日期,僅限時間或日期時間。通過將確切的輸入類型放入視圖中,我知道不必打開另一個文件如何處理日期時間字段。 – 37Stars

+6

個人而言,我更喜歡使用數據註釋和模型元數據提供程序來控制這類事情。這意味着我的視圖可以非常簡潔,控制渲染輸出的邏輯是在一個地方。 –

0

@ Html.EditorForModel()?放棄寫自己的看法的樂趣? 微笑

除了有趣,做爲一種習慣是相當危險的。考慮以下常見情況 - 您的客戶表中的數據庫中有一個bool變量,比如IsMale。很明顯,你不需要默認版本(帶有複選框的IsMale) - 你可能想要一些更友好的東西,比如{select,Options ....,/ select}標籤,對吧?這就是視圖真正開始踢的地方。這就是定製。每個觀點都有一點不同。你有RAZOR引擎,最大限度地利用它!在您的視圖中,您可以覆蓋任何內容,甚至可以手動輸入您自己的整個HTML代碼塊。

+2

EditorForModel()(沒有參數)將根據約定查找自定義EditorTemplates。該功能與使用_what_模板無關。 –

+0

你稱之爲代碼成癮者?一個codie? – frostymarvelous

19

由於接受的答案是一個僅鏈接的答案(並被刪除),我以爲我實際上回答了從Brad Wilson的博客:ASP.NET MVC 2 Templates, Part 1: Introduction派生的問題。

模型表達式是操作當前模型的簡單助手。 DisplayForModel()行等價於DisplayFor(model => model)。

TL; DR可以假定爲EditorFor(model => model)EditorForModel()同樣的想法;這些輔助方法實現相同的目的。 EditorForModel()假設模型表達式是傳遞給視圖的@model

看看下面的模型和視圖,例如:

public class Person 
{ 
    public string Name {get; set;} 
    public Address MailingAddress {get; set;} 
} 

public class Address 
{ 
    public String Street {get; set;} 
    public String City {get; set;} 
    public String State {get; set;} 
} 

Create.cshtml

@model MyNamespace.Models.Person 

/* So, you need an Editor for the Person model? */ 
@Html.EditorForModel() 
/*the above is equivalent to @Html.EditorFor(model => model) */ 

/* you need to specify the Address property that the editor accepts? */ 
@Html.EditorFor(model => model.MailingAddress) 
相關問題