1. ホーム
  2. image

[解決済み] アクションイメージ MVC3 Razor

2022-08-25 02:02:02

質問

MVC3でRazorを使用してリンクを画像に置き換える最良の方法は何でしょうか。 私は現在、単にこれをやっています。

<a href="@Url.Action("Edit", new { id=MyId })"><img src="../../Content/Images/Image.bmp", alt="Edit" /></a> 

もっと良い方法はないのでしょうか?

どのように解決するのですか?

HtmlHelperの拡張メソッドを作成することで、CSHTMLファイル内のコードを簡素化することができます。タグをこのようなメソッドに置き換えることができます。

// Sample usage in CSHTML
@Html.ActionImage("Edit", new { id = MyId }, "~/Content/Images/Image.bmp", "Edit")

上記のコードに対する拡張メソッドのサンプルを示します。

// Extension method
public static MvcHtmlString ActionImage(this HtmlHelper html, string action, object routeValues, string imagePath, string alt)
{
    var url = new UrlHelper(html.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 MvcHtmlString.Create(anchorHtml);
}