Colocando HTML dentro de Html.ActionLink (), mais nenhum texto de link?

Eu tenho duas perguntas:

  1. Eu estou querendo saber como eu posso exibir nenhum texto de link ao usar Html.ActionLink() em uma exibição MVC (na verdade, isso é Site.Master ).

Não há uma versão sobrecarregada que não permita o texto do link, e quando eu tento passar apenas uma string vazia, o compilador me diz que precisa de uma string não vazia.

Como posso consertar isso?

  1. Eu preciso colocar tags dentro da tag âncora, mas não está funcionando com Html.ActionLink(); . Eu gostaria de ver a seguinte saída:

    Texto do período

Como posso colocar tags dentro da tag de âncora no asp.net MVC?

    Em vez de usar o Html.ActionLink, você pode renderizar uma url via Url.Action

     ">Text Text 

    E para fazer uma URL em branco, você poderia ter

     ">  

    Uma extensão HtmlHelper personalizada é outra opção. Nota : ParameterDictionary é meu próprio tipo. Você poderia replace um RouteValueDictionary, mas teria que construí-lo de forma diferente.

     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(); } 

    Basta usar Url.Action vez de Html.ActionLink :

     
  • ">Span text
  • Aqui está uma solução (baixa e suja) no caso de você precisar usar ajax ou algum recurso que você não pode usar ao fazer o link manualmente (usando tag):

     <%= Html.ActionLink("LinkTextToken", "ActionName", "ControllerName").ToHtmlString().Replace("LinkTextToken", "Refresh ")%> 

    Você pode usar qualquer texto em vez de ‘LinkTextToken’, ele está lá apenas para ser substituído, só é importante que ele não ocorra em nenhum outro lugar dentro do actionlink.

    Isso sempre funcionou bem para mim. Não é confuso e muito limpo.

    Text

    Acabei com um método de extensão personalizado. Vale a pena notar, ao tentar colocar HTML dentro de um object Âncora, o texto do link pode estar à esquerda ou à direita do HTML interno. Por esse motivo, optei por fornecer parâmetros para HTML interno à esquerda e à direita – o texto do link está no meio. O HTML interno esquerdo e direito é opcional.

    Método de extensão ActionLinkInnerHtml:

      public static MvcHtmlString ActionLinkInnerHtml(this HtmlHelper helper, string linkText, string actionName, string controllerName, RouteValueDictionary routeValues = null, IDictionary 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; } 

    Exemplo de Uso:

    Aqui está um exemplo de uso. Para este exemplo, eu só queria o html interno no lado direito do texto do link …

     @Html.ActionLinkInnerHtml( linkText: "Hello World" , actionName: "SomethingOtherThanIndex" , controllerName: "SomethingOtherThanHome" , rightInnerHtml: "" ) 

    Resultados:

    isso resulta no seguinte HTML …

     Hello World 

    Eu pensei que isso poderia ser útil ao usar bootstrap e alguns glipons:

     "> Download   

    Isso mostrará uma tag A, com um link para um controlador, com um belo ícone de clipe de papel para representar um link de download, e a saída em html será mantida limpa

    Aqui está uma grande expansão da resposta do @tvanfosson. Eu fui inspirado por ele e decidi torná-lo mais genérico.

      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); } } 

    É muito simples.

    Se você quiser ter algo como um ícone de glifo e depois “Lista de desejos”,

      @Html.ActionLink("Wish List (0)", "Index", "Home") 

    Minha solução usando componentes de bootstrap:

       Reset Password  

    Por favor, tente abaixo Código que pode ajudá-lo.

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