我目前创建了一个扩展方法
using System.Web;
using System.Web.Mvc;
namespace Mobi.QualityControl.Site.Infrastructure
{
public static class HtmlHelpers
{
public static HtmlString ActionImage(this HtmlHelper htmlHelper, string action, object routeValues, string imagePath, string alt)
{
var url = new UrlHelper(htmlHelper.ViewContext.RequestContext);
// build the <img> tag
var imgBuilder = new TagBuilder("img");
imgBuilder.MergeAttribute("src", url.Content(imagePath));
imgBuilder.MergeAttribute("alt", alt);
string imgHtml = imgBuilder.ToString(TagRenderMode.SelfClosing);
// build the <a> tag
var anchorBuilder = new TagBuilder("a");
anchorBuilder.MergeAttribute("href", url.Action(action, routeValues));
anchorBuilder.InnerHtml = imgHtml; // include the <img> tag inside
string anchorHtml = anchorBuilder.ToString(TagRenderMode.Normal);
return new HtmlString(anchorHtml);
}
}
}
然后我尝试在我的web.config中使用using语句在我的页面中使用它并且它正在选择方法但它
@ HtmlHelpers.ActionImage(“Account / Register”,“/ images / home / studentstarted.png”,“编辑”,“GettingStarted”)
它说它仍然需要5个参数而不是4个。
这可能非常简单。任何帮助将不胜感激。
答案 0 :(得分:2)
不,你没有正确地打电话给你的助手。它应该是这样的:
@Html.ActionImage("Account/Register", "/images/home/gettingstarted.png", "Edit", "GettingStarted")
ASP.NET MVC中的Html助手只不过是C#中的extension methods
,我邀请您在进入ASP.NET MVC之前熟悉它。
基本上在C#中,扩展方法是在它们扩展的类的实例上调用的。在你的情况下,这是HtmlHelper
类。 Razor视图有一个名为Html
的属性,其类型为HtmlHelper
。所以你调用它的扩展方法:
@Html.SOME_EXTENSION_METHOD_THAT_IS_BROUGHT_INTO_SCOPE_BY_A_USING_DIRECTIVE(...)
当然,扩展方法只不过是你也可以像这样调用的静态方法(这是错误的,请不要再调用这样的扩展方法 - 它不是为什么以及如何设计扩展方法):
@HtmlHelpers.ActionImage(Html, "Account/Register", "/images/home/gettingstarted.png", "Edit", "GettingStarted")
注意我如何传递Html
作为静态方法的第一个参数。但永远不要使用它。