覆盖`Html.EditorFor`上的类

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模板?

感谢您所有的帮助。

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\"")) %>

1
在阅读了Brad的所有示例后,我最终使用了<%: Html.TextBox("ConfirmationHeadline", null, new { @class = "span-11 last" })%>。感谢提供链接。 - balexandre

6

在MCV 5.1中,您可以利用htmlAttributes。非常好用...

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

2

ASP.NET MVC在内容文件夹中创建了一个名为site.css的文件。您可以看到,text-box类默认设置为30em的宽度。请将其重置为更合理的15em。单行类似乎没有定义在任何地方。


1
我总是放弃site.css! - Nikos

1
您可以使用 TextBoxFor 而不是。

2
你知道EditorForTextboxFor之间的区别吗?你可以在这里快速找到答案。 - balexandre

0
我曾经遇到过同样的问题,但是并不喜欢上面提供的任何解决方案。我在这里也找到了一个类似的帖子,但是那些解决方案我也不喜欢。经过一番尝试,我找到了一种我喜欢的方法,可以让我继续使用编辑器模板(每当有机会时,你都应该尝试利用它)。我在这里发布了解决方案。

-2

尝试一下这段代码

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

4
你最好添加一些解释。 - lpratlong
低质量帖子审核:请遵循@Ipratlong的建议。当前形式的回答可能因为违反规定而被删除。 - ElmoVanKielmo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接