把HTML放入Html.ActionLink(),加上没有链接文本?

我有两个问题:

  1. 我想知道如何在MVC视图中使用Html.ActionLink() (实际上,这是Site.Master )时不显示链接文本。

没有一个重载的版本不允许链接文本,当我尝试传递一个空白string ,编译器告诉我它需要一个非空string。

我该如何解决这个问题?

  1. 我需要把<span>标签放在anchor标签中,但是它不能和Html.ActionLink();一起工作Html.ActionLink(); 。 我想看到下面的输出:

    跨度文本

如何将标签放在ASP.NET MVC的锚标签中?

而不是使用Html.ActionLink你可以通过Url.Action呈现一个URL

 <a href="<%= Url.Action("Index", "Home") %>"><span>Text</span></a> <a href="@Url.Action("Index", "Home")"><span>Text</span></a> 

并做一个空白的url,你可以有

 <a href="<%= Url.Action("Index", "Home") %>"></a> <a href="@Url.Action("Index", "Home")"></a> 

自定义的HtmlHelper扩展是另一种select。 注意 :ParameterDictionary是我自己的types。 你可以用一个RouteValueDictionary来代替,但是你必须以不同的方式构造它。

 public static string ActionLinkSpan( this HtmlHelper helper, string linkText, string actionName, string controllerName, object htmlAttributes ) { TagBuilder spanBuilder = new TagBuilder( "span" ); spanBuilder.InnerHtml = linkText; return BuildNestedAnchor( spanBuilder.ToString(), string.Format( "/{0}/{1}", controllerName, actionName ), htmlAttributes ); } private static string BuildNestedAnchor( string innerHtml, string url, object htmlAttributes ) { TagBuilder anchorBuilder = new TagBuilder( "a" ); anchorBuilder.Attributes.Add( "href", url ); anchorBuilder.MergeAttributes( new ParameterDictionary( htmlAttributes ) ); anchorBuilder.InnerHtml = innerHtml; return anchorBuilder.ToString(); } 

只需使用Url.Action而不是Html.ActionLink

 <li id="home_nav"><a href="<%= Url.Action("ActionName") %>"><span>Span text</span></a></li> 

这是(低和肮脏)的解决方法,以防您需要使用ajax或手动进行链接(使用标记)时不能使用的某些function:

 <%= Html.ActionLink("LinkTextToken", "ActionName", "ControllerName").ToHtmlString().Replace("LinkTextToken", "Refresh <span class='large sprite refresh'></span>")%> 

您可以使用任何文本而不是“LinkTextToken”,它只是在那里被replace,只有重要的是它不会发生在actionlink的其他地方。

这一直对我很好。 它不杂乱,很干净。

<a href="@Url.Action("Index", "Home")"><span>Text</span></a>

我认为这可能是有用的,当使用引导和一些glypicons:

 <a class="btn btn-primary" href="<%: Url.Action("Download File", "Download", new { id = msg.Id, distributorId = msg.DistributorId }) %>"> Download <span class="glyphicon glyphicon-paperclip"></span> </a> 

这将显示一个A标签,带有指向控制器的链接,上面有一个漂亮的回形针图标来表示下载链接,并且html输出保持清洁

这是@ tvanfosson的答案超级扩张。 我受到了它的启发,并决定让它更通用。

  public static MvcHtmlString NestedActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, string controllerName, object routeValues = null, object htmlAttributes = null, RouteValueDictionary childElements = null) { var htmlAttributesDictionary = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes); if (childElements != null) { var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext); var anchorTag = new TagBuilder("a"); anchorTag.MergeAttribute("href", routeValues == null ? urlHelper.Action(actionName, controllerName) : urlHelper.Action(actionName, controllerName, routeValues)); anchorTag.MergeAttributes(htmlAttributesDictionary); TagBuilder childTag = null; if (childElements != null) { foreach (var childElement in childElements) { childTag = new TagBuilder(childElement.Key.Split('|')[0]); object elementAttributes; childElements.TryGetValue(childElement.Key, out elementAttributes); var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(elementAttributes); foreach (var attribute in attributes) { switch (attribute.Key) { case "@class": childTag.AddCssClass(attribute.Value.ToString()); break; case "InnerText": childTag.SetInnerText(attribute.Value.ToString()); break; default: childTag.MergeAttribute(attribute.Key, attribute.Value.ToString()); break; } } childTag.ToString(TagRenderMode.SelfClosing); if (childTag != null) anchorTag.InnerHtml += childTag.ToString(); } } return MvcHtmlString.Create(anchorTag.ToString(TagRenderMode.Normal)); } else { return htmlHelper.ActionLink(linkText, actionName, controllerName, routeValues, htmlAttributesDictionary); } } 

这很简单。

如果你想有一个象形文字的图标,然后是“愿望清单”,

 <span class="glyphicon-heart"></span> @Html.ActionLink("Wish List (0)", "Index", "Home") 

我的解决scheme使用引导组件:

 <a class="btn btn-primary" href="@Url.Action("resetpassword", "Account")"> <span class="glyphicon glyphicon-user"></span> Reset Password </a> 

请尝试下面的代码,可以帮助你。

  @Html.ActionLink(" SignIn", "Login", "Account", routeValues: null, htmlAttributes: new { id = "loginLink" ,**@class="glyphicon glyphicon-log-in"** }) 

我结束了一个自定义的扩展方法。 值得注意的是,当试图将HTML放置在一个Anchor对象内时,链接文本可以位于内部HTML的左边或右边。 出于这个原因,我select了为左右内部HTML提供参数 – 链接文本在中间。 左侧和右侧的内部HTML都是可选的。

扩展方法ActionLinkInnerHtml:

  public static MvcHtmlString ActionLinkInnerHtml(this HtmlHelper helper, string linkText, string actionName, string controllerName, RouteValueDictionary routeValues = null, IDictionary<string, object> htmlAttributes = null, string leftInnerHtml = null, string rightInnerHtml = null) { // CONSTRUCT THE URL var urlHelper = new UrlHelper(helper.ViewContext.RequestContext); var url = urlHelper.Action(actionName: actionName, controllerName: controllerName, routeValues: routeValues); // CREATE AN ANCHOR TAG BUILDER var builder = new TagBuilder("a"); builder.InnerHtml = string.Format("{0}{1}{2}", leftInnerHtml, linkText, rightInnerHtml); builder.MergeAttribute(key: "href", value: url); // ADD HTML ATTRIBUTES builder.MergeAttributes(htmlAttributes, replaceExisting: true); // BUILD THE STRING AND RETURN IT var mvcHtmlString = MvcHtmlString.Create(builder.ToString()); return mvcHtmlString; } 

使用示例:

这是一个使用的例子。 对于这个例子,我只想要链接文本右侧的内部html …

 @Html.ActionLinkInnerHtml( linkText: "Hello World" , actionName: "SomethingOtherThanIndex" , controllerName: "SomethingOtherThanHome" , rightInnerHtml: "<span class=\"caret\" />" ) 

结果:

这导致在下面的HTML …

 <a href="/SomethingOtherThanHome/SomethingOtherThanIndex">Hello World<span class="caret" /></a>