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

发布于 2024-10-19 11:33:40 字数 879 浏览 1 评论 0 原文

如何添加到所有 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缺失?

任何帮助都会很好。

预先非常感谢您。

How can I add to ALL textboxes in ALL aspx sites, like:

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

a javascript function without searching them and adding manually something like:

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

Idea: Writing an ascx like the following one!

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

Please let us say this ascx is named Test.ascx
and that it is stored in \Views\Shared\EditorTemplates\.

My problem is that "Test.ascx" isnt called.
Why?
Must a reference be added to all aspx sites?
Is there a < System.String> in the Inherit missing?

Any help would be fine.

Thank you very much in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

失与倦" 2024-10-26 11:33:40

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

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

而不是:

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

通过使用 Html.TextBoxFor 您显式硬编码此值并且您需要 并且您无法覆盖或替换它。这就是为什么使用 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) %>

In order for your custom editor template to be called you need to use:

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

and not:

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

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 use Html.EditorFor as it allows you to modify the way this is rendered by defining a custom template in the Views\Shared\EditorTemplates folder.

Now if you editor template is called: Test.ascx you could invoke it like this:

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

or by decorating your view model property with the [UIHint] attribute:

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

and then simply:

<%= Html.EditorFor(model => model.Firstname) %>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文