首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >动作图像MVC3剃刀

动作图像MVC3剃刀
EN

Stack Overflow用户
提问于 2011-02-04 17:31:33
回答 10查看 133.3K关注 0票数 119

在MVC3中使用剃刀替换图像链接的最好方法是什么?我现在只是简单地这样做:

代码语言:javascript
复制
<a href="@Url.Action("Edit", new { id=MyId })"><img src="../../Content/Images/Image.bmp", alt="Edit" /></a> 

有没有更好的方法?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2011-02-05 03:14:42

您可以为HtmlHelper创建一个扩展方法,以简化CSHTML文件中的代码。您可以使用如下方法替换您的标记:

代码语言:javascript
复制
// Sample usage in CSHTML
@Html.ActionImage("Edit", new { id = MyId }, "~/Content/Images/Image.bmp", "Edit")

下面是上述代码的扩展方法示例:

代码语言:javascript
复制
// 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);
}
票数 217
EN

Stack Overflow用户

发布于 2011-02-04 21:52:53

您可以使用Url.Content,它适用于所有链接,因为它将代字号~转换为根uri。

代码语言:javascript
复制
<a href="@Url.Action("Edit", new { id=MyId })">
    <img src="@Url.Content("~/Content/Images/Image.bmp")", alt="Edit" />
</a>
票数 64
EN

Stack Overflow用户

发布于 2012-07-31 10:28:20

基于卢卡斯上面的回答,这是一个接受控制器名称作为参数的重载,类似于ActionLink。当您的图像链接到不同控制器中的Action时,请使用此重载。

代码语言:javascript
复制
// Extension method
public static MvcHtmlString ActionImage(this HtmlHelper html, string action, string controllerName, 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, controllerName, routeValues));
    anchorBuilder.InnerHtml = imgHtml; // include the <img> tag inside
    string anchorHtml = anchorBuilder.ToString(TagRenderMode.Normal);

    return MvcHtmlString.Create(anchorHtml);
}
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4896439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档