2013-01-09 35 views
0

我已經當前創建一個擴展方法創建的HtmlHelper擴展方法,但它仍然要求

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中,它正在挑選方法,但它

@ HtmlHelpers.ActionImage(「帳戶/註冊」,「/images/home/gettingstarted.png」,「編輯」,「GettingStarted」)

它說它仍然需要5個參數不是4.

它可能是一個非常簡單的東西。任何幫助,將不勝感激。

回答

2

不,你沒有正確地呼叫你的幫手。它應該是這樣的:

@Html.ActionImage("Account/Register", "/images/home/gettingstarted.png", "Edit", "GettingStarted") 

在ASP.NET MVC HTML輔助只不過是extension methods更在C#中,我邀請你進入ASP.NET MVC之前熟悉。

基本上在C#中,擴展方法在它們正在擴展的類的實例上被調用。在你的情況下,這是HtmlHelper類。剃刀視圖有一個名爲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爲靜態方法的第一個參數。但從來沒有使用過。

+0

乾杯我認爲這是簡單的事情 –