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

DataTypeAttribute overrides class element set in EditorTemplate String.chtml

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

我正在使用:

  1. 引导程序 3.3.1
  2. ASP.NETMVC 5.2

我试过:

  1. 正在禁用 JavaScript。
  2. 在 String.chtml 中使用 TextBoxFor 而不是 TextBox 设置样式。

我更愿意:

  1. 除非必要(因为 Bootstrapper),否则不添加额外的 CSS。
  2. 不使用 JavaScript / JQuery 来解决问题。
  3. 使用ASP.NET MVC 解决冲突。

这是我在 EditorTemplates 文件夹中的 String.chtml:

视图模型(带有弄乱我的 EditorTemplate 的 DataTypeAttributes):

这是使用新的 EditorTemplate (String.chtml) 的 Login.chtml:

我目前的成绩:

当指定 DataType.Password / DataType.EmailAddress 属性时,如何将 CSS class 添加到 Html.ForEditor?

如果有什么不清楚的地方,请告诉我,我会add/change。

这里的问题是对实际发生的事情存在根本性的误解。 DataType 没有覆盖您的 ViewData,它导致 selected 一个完全不同的模板.. 即..内置的默认密码或电子邮件地址模板。

DataType 的用途是select 用于呈现的模板。所以你真正想要做的是创建一个 EmailAddress.cshtml 和一个 Password.cshtml 模板并向它们添加 form-control 属性。但是,这些并不是真正必需的,因为您可以将这些属性添加到 MVC 5.1 或更高版本中的 EditorFor。

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