【问题标题】:Set the class attribute to Html.EditorFor in ASP.NET MVC Razor View在 ASP.NET MVC Razor 视图中将类属性设置为 Html.EditorFor
【发布时间】:2012-01-23 10:44:11
【问题描述】:

如您所知,我们可以在 razor 视图中将属性设置为 actionLink 或 textBox,但我们如何将属性设置为 @Html.EditorFor,我知道 EditorFor 是一个动态元素,可以根据模型类型进行设置,但它的所有形状可以获得属性。那么有什么方法可以将属性设置为@Html.EditorFor 像这样:new {@class = "myclass"}

【问题讨论】:

  • 这里没有重载,因此你不能这样做。为什么不直接使用你想要的实际类型(例如 TextBox)并将其传递给该类型

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


【解决方案1】:

试试这个:

@Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } })

【讨论】:

  • HellBaby 说得对,这是 MVC 5 的新语法。new { htmlAttributes = new { @style = "width:20px" } } 作为示例也适用于 style 属性。跨度>
  • 这不适用于卡在 MVC 4 中的人。
  • 适用于 Core 2.X
【解决方案2】:

EditorFor 助手渲染相应的编辑器模板。它可能是default template 或您编写的一些自定义模板。该模板可以包含任何标记。它可以包含许多 DOM 元素。所以现在你明白了要求将类应用到模板没有任何意义。您希望将此类应用于此模板上的哪个元素?例如,使用 TextBoxFor 帮助器,您知道它将生成单个输入字段,因此讨论对其应用 CSS 类是有意义的(这正是 htmlAttributes 参数允许您做的事情)。

这就是说有不同的技术。例如,我非常喜欢编写自定义数据注释模型元数据提供程序和自定义编辑器模板,如following blog post 中所述。

另一种可能性是自定义默认模板(如 Brad Wilson 的博客文章所示)并将不同的 HTML 属性应用于相应的输入字段。我们以 string.cshtml 编辑器模板为例:

@model string
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, ViewData)

现在,当您想为视图模型上的某些字符串属性呈现此编辑器模板时:

@Html.EditorFor(x => x.SomeStringProperty, new { @class = "myclass" })

【讨论】:

  • 我将这个类用于 type=(text , file) 和 select(drop down) 的输入。
  • @dotNetist,好的,正如我的回答中所述,您有几种不同的方法来实现这一点。
  • 谢谢,但在阅读您提到的参考资料之前,我有一个问题:我不想为所有(例如)字符串类型设置属性,我有一个自定义属性(在我的模型中)并且我更改了代码模板(T4)并且我需要具有该特定自定义属性的属性在编辑器中设置“myclass”属性以获取帮助,所以你认为与否?
  • @dotNetist,我的回答中涉及这两种方法,您不会为所有字符串类型全局设置它。使用第一种方法,您可以装饰您希望使用 HtmlProperties 属性应用 CSS 类的视图模型属性,使用第二种方法,您将其作为参数传递给 EditorFor 帮助器,这显然仅适用于该给定属性。
【解决方案3】:

添加自定义属性为

@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @data_minlength = "3", @class = "form-control input-md", @placeholder = "Name", @required = "required", @id= "txtName"} })

将 data- 替换为 @data_

它将生成正确的带有数据的html-

【讨论】:

  • 这适用于 MVC 5.1+,但不适用于早期版本。仅供参考。
【解决方案4】:

我相信原海报是正确的

  • 每个EditorFor()

    创建一个主HTML element(尽管可能还有其他人在场),因此能够传递一个包含HTML attributes对象 以应用于该主HTML element 将非常有帮助.

  • 我想将 HTML 5 'autofocus' 属性应用到每个 form 上的一个 field

  • 但我不想编写自定义代码。

  • 我讨厌我目前只使用 @Html.TextBoxFor() 作为那个 字段 的事实,这样我就可以将特定的 属性 应用到 @ 987654327@.

  • EditorFor() 方法确实有一个 参数,他们称之为 additionalViewData,但我不知道你能用它做什么,并且在 MSDN 上搜索还没有对我有什么帮助。

【讨论】:

    【解决方案5】:

    试试这个简单的代码添加类到@Html.EditorFor()

    @Html.EditorFor(x => x.Demo)
    
    <style type="text/css">
    
    #Demo
    {
       color:#fff;
       width: 50%;
    }
    
    </style>
    

    这段代码适用于 MVC3

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 2015-04-25
      • 1970-01-01
      相关资源
      最近更新 更多