我一直在使用一些自定义的html助手,现在我正在尝试制作一个可以用于jquery AJAX UI Tabs的助手。
因此,要使用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>所以我不能使用actionLink,因为我不认为我可以在ActionLink中添加标签。
所以我想做我自己的html助手,里面有一个带有span标签的actionLink,以后可能会把它构建成一个无序列出的标签。
因此,我不确定如何使用ActionLink对我有利。例如,ActionLink有10个重载的方法,我不想重新创建所有的10个方法,因为这看起来毫无意义。那么有没有我可以引用它或者类似的东西呢?
我使用的方式允许我的自定义html助手在您执行“Html”时显示出来。在智能感知中。
例如,我会:
public static string Button(this HtmlHelper helper, string id, string value)所以我不确定如何使用我传入的这个HtmlHelper。
我也不理解"this HtmlHelper helper“这行代码的这一部分。
让我困惑的是在参数中使用关键字"this“。我不确定它指的是什么,也不知道你为什么需要它。我也不明白如何通过传递这个参数而不使用它,以某种方式允许您的客户Html助手被"Html.“访问。
谢谢
发布于 2009-07-24 13:49:34
Marc's answer非常优秀。只需添加一些代码:
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);
}
}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>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>发布于 2009-07-24 09:23:19
this HtmlHelper helper意味着它是HtmlHelper上的C# 3.0“扩展方法”,这就是它在视图(等)的Html实例上变得可用的方式。扩展方法是一种静态方法,它(在编译时)伪装成this (在本例中为HtmlHelper)指定的类型上可用的实例方法。实际上,编译器会调用静态方法(Html.Button({args})),就好像您输入了:
MyStaticClass.Button(Html, {args});如果您不需要传入的HtmlHelper (inded,我不使用它here),那么就没有必要使用它;它的主要工作(在本例中)是使代码易于使用(作为扩展方法);但在某些情况下,它可能很有用。
发布于 2009-07-24 09:44:24
创建使用jQuery AJAX UI Tabs的链接不一定要有HtmlHelper。
jQuery选项卡插件接受一个名为tabTemplate的参数,您可以设置该参数:
$("#example").tabs({ tabTemplate: "<li><a href=\"#{href}\">#{label}</a></li>" });请参阅documentation。
https://stackoverflow.com/questions/1176557
复制相似问题