在`Html.EditorFor`上覆盖类

时间:2010-11-02 15:04:29

标签: asp.net-mvc-2 textinput class-attributes

默认带

<%: 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模板吗?

感谢您的帮助。

6 个答案:

答案 0 :(得分:11)

通过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方法的输出:

  3.  <%: new HtmlString(Html.EditorFor(m=>m.ConfirmationHeadline).ToString()
            .Replace("class=\"text-box single-line\"", 
                     "class=\"text-box single-line span-11 last\"")) %>
    

答案 1 :(得分:5)

在MCV 5.1中,您可以利用htmlAttributes。像魅力一样......

@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control", placeholder = "Enter your Name" } })

答案 2 :(得分:2)

asp.net mvc在内容文件夹中创建一个名为site.css的文件。在那里,您可以看到默认情况下文本框类的宽度设置为30em。把它重置为像15em这样的东西。单行类似乎没有在任何地方定义。

答案 3 :(得分:1)

您可以使用TextBoxFor代替

答案 4 :(得分:0)

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

答案 5 :(得分:-2)

试试这段代码

@Html.Raw(
    Html.EditorFor(m => m.DataInicial).ToString()
    .Replace(
        "\"text-box single-line\"",
        "\"form-control text-box single-line\""))