14

默认情况下

<%: Html.EditorFor(m => m.ConfirmationHeadline) %>

输出是:

 <input type="text" value="" 
        name="ConfirmationHeadline" id="ConfirmationHeadline" 
        class="text-box single-line">

如您所见,输入已经附加了一个class属性。好吧,这应该不是问题,只需使用

<%: Html.EditorFor(m => m.ConfirmationHeadline, new { @class="span-11 last"}) %>

并且应该工作......错误......不!

这将输出完全相同的代码!

不过,可以正常使用Html.TextAreaFor()

我怎样才能text-box single-line从曾经出现的类中删除,以便可以附加我自己的类?我应该编辑任何 T4 模板吗?

谢谢大家的帮助。

4

6 回答 6

12

EditorFor通过该方法使用内置编辑器模板时,无法自定义发出的类属性的值。它对类值进行硬编码(此处提供更多信息:http: //bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates.html

你有两个选择:

  1. 编写您自己的支持额外功能的自定义模板。在这里查看更多详细信息:http: //bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html

  2. 处理方法的输出EditorFor

 <%: new HtmlString(Html.EditorFor(m=>m.ConfirmationHeadline).ToString()
        .Replace("class=\"text-box single-line\"", 
                 "class=\"text-box single-line span-11 last\"")) %>
于 2010-11-02T18:03:24.620 回答
6

在 MCV 5.1 中,您可以利用 htmlAttributes。奇迹般有效...

@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control", placeholder = "Enter your Name" } })
于 2014-05-23T16:25:32.567 回答
2

asp.net mvc 在内容文件夹中创建一个名为 site.css 的文件。在那里你可以看到文本框类默认设置为 30em 的宽度。将其重置为 15em 之类的更理智的值。单行类似乎没有在任何地方定义。

于 2010-12-01T06:15:52.710 回答
1

您可以TextBoxFor改用

于 2013-01-23T15:01:19.743 回答
0

我有同样的问题,不喜欢上面的任何解决方案。我也在这里找到了类似的帖子,但我也不喜欢这些解决方案。经过一些工具,我找到了我喜欢的东西,这让我可以继续使用编辑器模板(这是你应该尽可能利用的东西)。我在这里发布了解决方案

于 2013-02-21T22:41:09.417 回答
-2

试试这个代码

@Html.Raw(
    Html.EditorFor(m => m.DataInicial).ToString()
    .Replace(
        "\"text-box single-line\"",
        "\"form-control text-box single-line\""))
于 2014-06-05T12:35:00.613 回答