首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要帮助为Asp.net MVC构建自定义Html Helper

需要帮助为Asp.net MVC构建自定义Html Helper
EN

Stack Overflow用户
提问于 2009-07-24 09:15:58
回答 3查看 4.4K关注 0票数 5

我一直在使用一些自定义的html助手,现在我正在尝试制作一个可以用于jquery AJAX UI Tabs的助手。

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

代码语言:javascript
复制
<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>

所以我不能使用actionLink,因为我不认为我可以在ActionLink中添加标签。

所以我想做我自己的html助手,里面有一个带有span标签的actionLink,以后可能会把它构建成一个无序列出的标签。

因此,我不确定如何使用ActionLink对我有利。例如,ActionLink有10个重载的方法,我不想重新创建所有的10个方法,因为这看起来毫无意义。那么有没有我可以引用它或者类似的东西呢?

我使用的方式允许我的自定义html助手在您执行“Html”时显示出来。在智能感知中。

例如,我会:

代码语言:javascript
复制
public static string Button(this HtmlHelper helper, string id, string value)

所以我不确定如何使用我传入的这个HtmlHelper。

我也不理解"this HtmlHelper helper“这行代码的这一部分。

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

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-24 13:49:34

Marc's answer非常优秀。只需添加一些代码:

1)使用帮助器创建静态类:

代码语言:javascript
复制
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);
    }
}

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

代码语言:javascript
复制
<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>

3)享受:) :

代码语言:javascript
复制
<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>
票数 8
EN

Stack Overflow用户

发布于 2009-07-24 09:23:19

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

代码语言:javascript
复制
MyStaticClass.Button(Html, {args});

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

票数 3
EN

Stack Overflow用户

发布于 2009-07-24 09:44:24

创建使用jQuery AJAX UI Tabs的链接不一定要有HtmlHelper

jQuery选项卡插件接受一个名为tabTemplate的参数,您可以设置该参数:

代码语言:javascript
复制
$("#example").tabs({ tabTemplate: "<li><a href=\"#{href}\">#{label}</a></li>" });

请参阅documentation

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1176557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档