DataTypeAttribute覆盖EditorTemplate String.chtml中的类元素集

时间:2015-01-12 17:20:45

标签: c# asp.net asp.net-mvc-5

我试图设置我的String.chtml EditorTemplate的ViewData [" class"]。当我从ViewModel中删除DataType.x属性时,它正在工作。但我想保留我的DataType.Password并应用其他css类。

我正在使用:

  1. Bootstrapper 3.3.1
  2. ASP.NET MVC 5.2
  3. 我试过了:

    1. 禁用JavaScript。
    2. 使用TextBoxFor设置样式,而不是使用String.chtml中的T​​extBox。
    3. 我更愿意:

      1. 除非必要,否则不要添加额外的CSS(因为Bootstrapper)。
      2. 不使用JavaScript / JQuery来解决问题。
      3. 使用ASP.NET MVC解决冲突。
      4. 这是我在EditorTemplates文件夹中的String.chtml:
        EditorTemplate String.chtml

        视图模型(使用压缩我的EditorTemplate的DataTypeAttributes):
        enter image description here

        这是使用新的EditorTemplate(String.chtml)的Login.chtml:
        enter image description here

        我目前的结果:
        enter image description here

        如果指定了DataType.Password / DataType.EmailAddress属性,如何向Html.ForEditor添加CSS类?

        让我知道什么时候不清楚,我会添加/更改它。

1 个答案:

答案 0 :(得分:2)

这里的问题是对实际情况的根本误解。 DataType不会覆盖您的ViewData,它会导致选择完全不同的模板..即...内置的默认密码或EmailAddress模板。

DataType的目的是选择用于渲染的模板。所以你真正想做的是创建一个EmailAddress.cshtml和一个Password.cshtml模板,并将表单控件属性添加到那些模板。但是,这些并不是必需的,因为您可以将这些属性添加到MVC 5.1或更高版本的EditorFor中。

@Html.EditorFor(x => x.Password, htmlAttributes: new { @class = "form-control" })