2014-09-26 134 views
3

在過去,我使用MVC3中的自定義類(HtmlProperties)通過聲明我的模型對象,如下所示來設置剃鬚刀內的HTML屬性。是否有用於設置HTML Size屬性和MaxLength的MVC5模型屬性?

[HtmlProperties(Size = 1, MaxLength = 2)] 
public string MyModelField{ get; set; } 

是否有一個MVC5相當於做這樣的事情,而不必建立一個自定義類?

+1

它看起來並不像它,儘管你可以爲它投票的[CodePlex網站(https://開頭aspnetwebstack .codeple x.com/workitem/1237)... – petelids 2014-09-26 11:52:45

+1

您可以在Razor View中添加Html屬性,還是想在ViewModel中定義它們? – rsobon 2014-09-26 11:53:23

+0

我寧願在模型或視圖模型中定義它們,以避免每次實現模型時都要指示剃刀。 – 2014-09-26 12:10:09

回答

4

嗯,據我所知,ViewModel和Model是而不是應該包含關於事情將如何呈現的信息。它們應該只包含類型(例如,字段是字符串)和要求(例如字段不爲空)。

因此,恕我直言的渲染對象(輸入應如何看起來)應該在剃刀視圖內。實際上,MVC5添加了新選項來實現這一點 - 您可以在渲染EditorFor時將htmlAttributes對象傳遞給additionalViewData對象參數。

@Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control", custom_attribute = "lol" } }) 

這是不可能的MVC3和MVC4,因爲很少有HTML輔助接受htmlAttributes作爲參數,少數的Html Helpes只接受additionalViewData

此外,我認爲你應該寧願使用[MaxLength(int i)],如果你打算限制長度在視圖模型輸入的(因爲這也將有助於MVC驗證其客戶端和服務器端)

[DisplayName("Name")] 
    [Required] 
    [MaxLength(5)] 
    public string Name{ get; set; } 
+3

+1強調此信息不屬於ViewModel或Model。它是視圖中明確屬於的演示信息。 – 2014-09-26 12:50:50