Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 扩展MVC3 HTML帮助程序以包括自定义HTML5属性_Asp.net Mvc_Asp.net Mvc 3_Html Helper - Fatal编程技术网

Asp.net mvc 扩展MVC3 HTML帮助程序以包括自定义HTML5属性

Asp.net mvc 扩展MVC3 HTML帮助程序以包括自定义HTML5属性,asp.net-mvc,asp.net-mvc-3,html-helper,Asp.net Mvc,Asp.net Mvc 3,Html Helper,我知道我可以使用匿名类型将自定义属性添加到任何给定的帮助器中,该匿名类型具有指定的属性和值,以呈现为HTML5属性,但是我希望在由外部指定的帮助器触发的给定视图中的所有HTML帮助器中实现相同的属性。类似于您从非突兀的JavaScript助手接收到的相同功能,它在表单字段属性的上下文中呈现验证规则 是否有人知道是否有一种“简单”的方法将这些定制注入到helpers中,或者我是否需要独立扩展每个helpers 干杯您不能从一个集中点扩展所有方法(编写代码,通过添加额外“htmlAttributes

我知道我可以使用匿名类型将自定义属性添加到任何给定的帮助器中,该匿名类型具有指定的属性和值,以呈现为HTML5属性,但是我希望在由外部指定的帮助器触发的给定视图中的所有HTML帮助器中实现相同的属性。类似于您从非突兀的JavaScript助手接收到的相同功能,它在表单字段属性的上下文中呈现验证规则

是否有人知道是否有一种“简单”的方法将这些定制注入到helpers中,或者我是否需要独立扩展每个helpers


干杯

您不能从一个集中点扩展所有方法(编写代码,通过添加额外“htmlAttributes”参数的重载来扩展所有html助手方法-可能通过使用IL方法生成是可能的,但这是一条艰难的道路)

每个扩展都应该是html助手方法的重载,您可以实现如下示例所示:

public static class HtmlExtensions
{
    public static string MyPager(this HtmlHelper html, string parameter1, int parameter2)
    {
        var builder = new TagBuilder("div");
        GenerateMyPagerBody(builder , parameter1, parameter2); // insert body into tag
        return builder.ToString(TagRenderMode.SelfClosing);
    }

    public static string MyPager(this HtmlHelper html, string parameter1, int parameter2, object htmlAttributes)
    {
        var builder = new TagBuilder("div");
        GenerateMyPagerBody(builder , parameter1, parameter2);
        builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
        return builder.ToString(TagRenderMode.SelfClosing);
    }
}

你能举个具体的例子说明你想要什么吗?您可以使用模板化的Razor委托()。我们希望根据表单字段的变化在客户端做一些工作。我们想要的方法是添加一个带有原始字段值的自定义属性,然后在更改后对新值和旧值进行比较。。这意味着有人可以将字段返回到其原始状态,而不会将其视为已更改。因此,每个助手(文本框、选择输入等)都会自动呈现属性。与其使用自定义属性,不如在文档准备就绪时使用jQuery遍历每个字段并存储原始值。然后,当某个字段发生更改时,您可以检查该字段的原始值,并采取相应的措施。@councellorben,这是我最初的解决方案,但被我的老板拒绝了。当时我正在寻找b计划。