我有一个像这样的模型元素:
[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" }) )
...似乎有点手册。有没有办法动态地做到这一点?
提前致谢
答案 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" : "") })