需要帮助为Asp.net MVC构建Custom Html Helper

cho*_*bo2 5 c# asp.net-mvc

我一直在玩一些自定义的html帮助器,我现在正在尝试制作一个可用于jquery AJAX 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>
Run Code Online (Sandbox Code Playgroud)

所以我不能使用ActionLink,因为我认为无论如何我都不能将标签添加到actionLink.

所以我想制作一个自己的html助手,其中包含一个带有span标签的actionLink,并且可能会在以后构建它以获得带有无序列出的标签.

所以我不确定如何使用ActionLink来获益.就像ActionLink有10个重载方法一样,我不想重新创建所有10个方法,因为这看起来毫无意义.那么我可以参考它或类似的东西吗?

当我使用"Html"时,我正在使用允许自定义html助手显示的方式.在intellisense.

比如我会:

public static string Button(this HtmlHelper helper, string id, string value)
Run Code Online (Sandbox Code Playgroud)

所以我不知道如何使用我传入的HtmlHelper.

我也不明白这段代码"这个HtmlHelper助手".

令我困惑的是在参数中使用关键字"this".我不确定它是指什么,为什么你需要它.我也不明白如何通过传递这个参数但不使用它以某种方式允许你的客户Html助手被"Html"加入.

谢谢

eu-*_*-ne 8

马克的答案很棒.只需添加一些代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

2)将MyHtmlHelpers类的名称空间添加到web.config:

<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>
Run Code Online (Sandbox Code Playgroud)

3)享受:):

<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>
Run Code Online (Sandbox Code Playgroud)