C# 需要帮助为Asp.net MVC构建自定义Html帮助程序吗

C# 需要帮助为Asp.net MVC构建自定义Html帮助程序吗,c#,asp.net-mvc,C#,Asp.net Mvc,我一直在使用一些自定义html帮助程序,现在我正在尝试制作一个可用于jQueryAjax UI选项卡的帮助程序 因此,要使用ajax选项卡,您需要在html代码中使用这种格式 <div id="example"> <ul> <li><a href="ahah_1.html"><span>Content 1</span></a></li> <li>

我一直在使用一些自定义html帮助程序,现在我正在尝试制作一个可用于jQueryAjax UI选项卡的帮助程序

因此,要使用ajax选项卡,您需要在html代码中使用这种格式

<div id="example">
     <ul>
         <li><a href="ahah_1.html"><span>Content 1</span></a></li>
         <li><a href="ahah_2.html"><span>Content 2</span></a></li>
         <li><a href="ahah_3.html"><span>Content 3</span></a></li>
     </ul>
</div>
因此,我不知道如何利用我传递的这个HtmlHelper

我也不理解代码行“ThisHtmlHelper”的这一部分

让我困惑的是在参数中使用关键字“this”。我不知道它指的是什么,为什么你需要它。我也不明白,通过传递这个参数,但不使用它,如何让您的客户Html助手被“Html”访问


谢谢这个
HtmlHelper
意味着它是
HtmlHelper
上的一个C#3.0“扩展方法”,这就是它在视图(etc)中的
Html
实例上可用的方式。扩展方法是一种静态方法,它假装(在编译时)是由
this
指定的类型上可用的实例方法(在本例中为
HtmlHelper
)。实际上,编译器调用静态方法(
Html.Button({args})
),就好像您键入了:

MyStaticClass.Button(Html, {args});

如果您不需要,则无需使用传入的
HtmlHelper
(inded,我不使用它);它的主要工作(在本例中)是使代码易于使用(作为一种扩展方法);但它在某些情况下可能很有用。

您不必使用
HtmlHelper
来创建与jQuery AJAX UI选项卡一起使用的链接

jQuery tabs插件接受名为
tabTemplate
的参数,您可以设置该参数:

$("#example").tabs({ tabTemplate: "<li><a href=\"#{href}\">#{label}</a></li>" });
$(“#示例”).tabs({tabTemplate:“
  • ”});
    请参阅。

    非常好。只是添加一些代码:

    1)与助手一起创建静态类:

    public static class MyHtmlHelpers
    {
        public static string MySpecialActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, object routeValues)
        {
            var innerTagBuilder = new TagBuilder("span") {
                InnerHtml = (!String.IsNullOrEmpty(linkText)) ? HttpUtility.HtmlEncode(linkText) : String.Empty
            };
    
            TagBuilder tagBuilder = new TagBuilder("a") {
                InnerHtml = innerTagBuilder.ToString(TagRenderMode.Normal);
            };
    
            var urlHelper = new UrlHelper(html.ViewContext.RequestContext);
            var url = urlHelper.Action(actionName, routeValues);
            tagBuilder.MergeAttribute("href", url);
    
            return tagBuilder.ToString(TagRenderMode.Normal);
        }
    }
    
    <pages>
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Linq" />
        <add namespace="System.Collections.Generic" />
    
        <add namespace="MyHtmlHelpers_Namespace" />
      </namespaces>
    </pages>
    
    <div id="example">
        <ul>
            <li><%= Html.MySpecialActionLink("Content 1", "action1", null) %></li>
            <li><%= Html.MySpecialActionLink("Content 2", "action2", new { param2 = "value2" }) %></li>
            <li><%= Html.MySpecialActionLink("Content 3", "action3", new { param3 = "value3" }) %></li>
        </ul>
    </div>
    
    2)将MyHtmlHelpers类的命名空间添加到web.config:

    public static class MyHtmlHelpers
    {
        public static string MySpecialActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, object routeValues)
        {
            var innerTagBuilder = new TagBuilder("span") {
                InnerHtml = (!String.IsNullOrEmpty(linkText)) ? HttpUtility.HtmlEncode(linkText) : String.Empty
            };
    
            TagBuilder tagBuilder = new TagBuilder("a") {
                InnerHtml = innerTagBuilder.ToString(TagRenderMode.Normal);
            };
    
            var urlHelper = new UrlHelper(html.ViewContext.RequestContext);
            var url = urlHelper.Action(actionName, routeValues);
            tagBuilder.MergeAttribute("href", url);
    
            return tagBuilder.ToString(TagRenderMode.Normal);
        }
    }
    
    <pages>
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Linq" />
        <add namespace="System.Collections.Generic" />
    
        <add namespace="MyHtmlHelpers_Namespace" />
      </namespaces>
    </pages>
    
    <div id="example">
        <ul>
            <li><%= Html.MySpecialActionLink("Content 1", "action1", null) %></li>
            <li><%= Html.MySpecialActionLink("Content 2", "action2", new { param2 = "value2" }) %></li>
            <li><%= Html.MySpecialActionLink("Content 3", "action3", new { param3 = "value3" }) %></li>
        </ul>
    </div>
    
    
    
    3)享受:):

    public static class MyHtmlHelpers
    {
        public static string MySpecialActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, object routeValues)
        {
            var innerTagBuilder = new TagBuilder("span") {
                InnerHtml = (!String.IsNullOrEmpty(linkText)) ? HttpUtility.HtmlEncode(linkText) : String.Empty
            };
    
            TagBuilder tagBuilder = new TagBuilder("a") {
                InnerHtml = innerTagBuilder.ToString(TagRenderMode.Normal);
            };
    
            var urlHelper = new UrlHelper(html.ViewContext.RequestContext);
            var url = urlHelper.Action(actionName, routeValues);
            tagBuilder.MergeAttribute("href", url);
    
            return tagBuilder.ToString(TagRenderMode.Normal);
        }
    }
    
    <pages>
      <namespaces>
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Linq" />
        <add namespace="System.Collections.Generic" />
    
        <add namespace="MyHtmlHelpers_Namespace" />
      </namespaces>
    </pages>
    
    <div id="example">
        <ul>
            <li><%= Html.MySpecialActionLink("Content 1", "action1", null) %></li>
            <li><%= Html.MySpecialActionLink("Content 2", "action2", new { param2 = "value2" }) %></li>
            <li><%= Html.MySpecialActionLink("Content 3", "action3", new { param3 = "value3" }) %></li>
        </ul>
    </div>
    
    
    

    那么,我只是列一个div列表,然后在所有herf的前面加上“#”?我不确定代码应该是什么样子。我使用HtmlHelpers,因为我发现它们更干净,并且停止使用spagetti代码,这就是我使用它们的原因。我仍然想知道如何在自定义Html帮助程序中调用生成的Html帮助程序。占位符#{href}和#{label}被替换为url和tab标签,作为参数传递给add方法。@chobo2-andymeadows是正确的。只需按您喜欢的方式创建选项卡,并使用tabTemplate选项使jQuery与您创建的链接(或任何其他元素)匹配即可。很抱歉,我仍然没有遵循。我需要一个完整的例子来了解它。谢谢,我会尽快尝试的。所以我想没有简单的方法来使用ActionLink,它有10个重载方法?我必须基本上图片和选择我需要什么?这又有什么用呢?InnerHtml=(!String.IsNullOrEmpty(linkText))?HttpUtility.HtmlEncode(linkText):String.Empty就像为什么要对它进行htmlencodeing一样?我可以理解为什么检查为空,但不确定为什么对其进行编码。出于生成正确标记和安全原因,linkText必须为HTML编码。来自MSDN:如果在HTTP流中传递空格和标点符号等字符,则它们可能在接收端被误解。HTML编码将HTML中不允许的字符转换为字符实体等价物;