如何:覆盖所有 Html.TextBox - ascx 未调用!为什么?
如何添加到所有 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>
中的Inherit缺失?
任何帮助都会很好。
预先非常感谢您。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
为了调用您的自定义编辑器模板,您需要使用:
而不是:
通过使用 Html.TextBoxFor 您显式硬编码此值并且您需要
并且您无法覆盖或替换它。这就是为什么使用
Html.EditorFor
是一种很好的做法,因为它允许您通过在Views\Shared\EditorTemplates
中定义自定义模板来修改呈现方式。文件夹。现在,如果您的编辑器模板被调用:
Test.ascx
,您可以像这样调用它:或者通过使用
[UIHint]
属性:然后简单地:
In order for your custom editor template to be called you need to use:
and not:
By using Html.TextBoxFor you are explicitly hardcoding this value and that you want an
<input type="text" ...
and you cannot override or replace it. That's the reason why it is good practice to useHtml.EditorFor
as it allows you to modify the way this is rendered by defining a custom template in theViews\Shared\EditorTemplates
folder.Now if you editor template is called:
Test.ascx
you could invoke it like this:or by decorating your view model property with the
[UIHint]
attribute:and then simply: