如何:覆盖所有Html.TextBox - 没有调用ascx!为什么?

时间:2011-02-26 11:46:33

标签: asp.net-mvc-2

如何在所有aspx网站中添加所有文本框,例如:

<%: Html.TextBoxFor(model => model.Firstname, new { style = "float: left; width: 4.1em;", maxlength = "4" })%>

一个javascript函数,无需搜索它们并手动添加类似:

new { onkeyup='Foo(this); return false;' }

想法:写一个ascx,如下所示!

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%: Html.TextBox(   string.Empty, 
                    ViewData.TemplateInfo.FormattedModelValue, 
                    new { onkeyup = "foo(this); return false;" })%>

请让我们说ascx名为Test.ascx 它存储在\Views\Shared\EditorTemplates\

我的问题是“Test.ascx”没有被调用 为什么呢?
必须将引用添加到所有aspx站点吗? 继承中是否有< System.String>缺失?

任何帮助都没问题。

非常感谢你。

1 个答案:

答案 0 :(得分:1)

要调用自定义编辑器模板,您需要使用:

<%= Html.EditorFor(model => model.Firstname) %>

而不是:

<%= Html.TextBoxFor(model => model.Firstname, new { style = "float: left; width: 4.1em;", maxlength = "4" })%>

通过使用Html.TextBox,您显式地对此值进行了硬编码,并且您想要<input type="text" ...并且无法覆盖或替换它。这就是使用Html.EditorFor的好习惯,因为它允许您通过在Views\Shared\EditorTemplates文件夹中定义自定义模板来修改呈现方式。

现在,如果您调用编辑模板:Test.ascx,您可以像这样调用它:

<%= Html.EditorFor(model => model.Firstname, "Test") %>

或使用[UIHint]属性修饰您的视图模型属性:

[UIHint("Test")]
public string Firstname { get; set; }

然后简单地说:

<%= Html.EditorFor(model => model.Firstname) %>