在ASP.net MVC Razor中渲染包含span的链接?

时间:2015-03-06 06:59:59

标签: c# html asp.net-mvc razor

渲染简单的链接很简单:

@Html.ActionLink("About this Website", "About")

但是你怎么用razor语法编写以下内容:

<a>
    <span>Hello, I'm inconvenient!</span>
</a>

欣赏正确方向的任何一点:)

2 个答案:

答案 0 :(得分:4)

您可以创建custom Html Helper,并可以在应用程序的任何视图中重复使用它:

namespace MyApplication.Helpers
{
  public static class CustomHtmlHelepers
  {
    public static IHtmlString ActionLinkWithSpan(this HtmlHelper htmlHelper, string linkText, string action, string controller, object routeValues, object htmlAttributes)
    {
       var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
       var span = new TagBuilder("span") { InnerHtml = linkText };
       var anchor = new TagBuilder("a") { InnerHtml = span.ToString() };
       anchor.Attributes["href"] = urlHelper.Action(action, controller, routeValues);
       anchor.MergeAttributes(new RouteValueDictionary(htmlAttributes));

       return MvcHtmlString.Create(anchor.ToString());

    }
  }
}

并在View中使用它:

@using MyApplication.Helpers;

@Html.ActionLinkWithSpan("LinkText","ActionName","ControllerName",null,null)

输出HTML:

<a href="/ControllerName/ActionName">
<span>LinkText</span>
</a>

答案 1 :(得分:3)

我不确定我是否正确地遵循了您的示例,因为它没有包含链接,并且该链接的文本与跨度的文本不同,但是这样的内容应该会给您一个大致的想法:< / p>

<a href='@Url.Action("About")'>
    <span>Hello, I'm inconvenient!</span>
</a>

使用Url.Action()将返回实际的超链接而不是元素。