0

現在、拡張メソッドを作成しました

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/gettingstarted.png"、 "Edit"、 "GettingStarted")

それはまだ4つではなく5つのパラメータを必要とすると言っています。

それはおそらく非常に単純なものです。どんな助けでもいただければ幸いです。

4

1 に答える 1

2

いいえ、ヘルパーを正しく呼び出していません。次のようになります。

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

ASP.NET MVCのHTMLヘルパーは、ASP.NET MVCextension methodsに入る前に、慣れ親しんでおくことをお勧めするC#にすぎません。

基本的に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静的メソッドの最初の引数としてどのように渡しているかに注意してください。しかし、決してそれを使用しないでください。

于 2013-01-09T22:05:12.983 に答える