mvc3 - 根据模型属性添加CSS类

时间:2011-07-22 09:43:04

标签: c# asp.net-mvc-3 razor

我有一个像这样的模型元素:

[Required]
[Display(Name = "First name")]
[StringLength(50)]
public string FirstName { get; set; }

我正在使用EditorFor将其抽出到页面中,如下所示:

@Html.EditorFor(x => x.FirstName )

我在页面上有很多这些元素,并希望根据模型是否具有[Required]属性,将CSS类添加到名为“Required”的输入字段中。

...添加

@Html.EditorFor(x => x.FirstName, new { @class = "Required" }) )

...似乎有点手册。有没有办法动态地做到这一点?

提前致谢

3 个答案:

答案 0 :(得分:6)

  

似乎有点手册。

最重要的是没有工作。与EditorFor助手相反,TextBoxFor助手的第二个参数不符合您的想法。您可以编写一个custom metadata provider,它允许您使用自定义属性修饰我们的视图模型属性,并指定要应用于编辑器模板的类:

[Required]
[Display(Name = "First name")]
[StringLength(50)]
[HtmlProperties(CssClass = "Required")]
public string FirstName { get; set; }

答案 1 :(得分:4)

如果您不需要支持最旧的浏览器,您还可以使用已自动添加到字段中的data-val-required html属性。在CSS中,这将是例如input[type="text"][data-val-required] { border-left: 2px solid blue; }

答案 2 :(得分:0)

我建议覆盖创建一个EditorTemplate:/Views/Shared/EditorTemplates/String.cshtml

把它放在内容中(抱歉未经测试!):

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line" + (ViewData.ModelMetadata.IsRequired ? " required" : "") })