2014-09-26 137 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