在ASP.NET MVC Razor View中将class属性设置为Html.EditorFor

时间:2011-12-19 09:04:39

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

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

5 个答案:

答案 0 :(得分:55)

试试这个:

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

答案 1 :(得分:45)

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" })

答案 2 :(得分:9)

将自定义属性添加为

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

将数据替换为@data_

它将使用数据生成正确的html -

答案 3 :(得分:2)

我相信原始海报是正确的

  • 每个 EditorFor()

    创建一个主HTML element(虽然可能有其他人存在),因此能够传递包含HTML attributes对象来应用于主HTML element

  • 我想将 HTML 5 '自动对焦'属性应用于每个表单上的字段

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

  • 我讨厌这样一个事实,即我目前只使用@Html.TextBoxFor()作为一个字段,以便我可以应用特定的属性input element

  • EditorFor()方法确实有一个参数,他们调用additionalViewData,但我不知道你可以用它做什么并在 MSDN上搜索对我没有任何帮助。

答案 4 :(得分:0)

尝试使用此简单代码将类添加到url = "https://www.googleapis.com/calendar/v3/calendars/primary/events?access_token=#{token}" params = {start: 'test'}.to_json response = RestClient.post url, params RestClient::BadRequest (400 Bad Request)

@Html.EditorFor()

此代码适用于MVC3