150 votes

Inclure une balise d'ancrage dans un lien d'action ASP.NET MVC Html.

En ASP.NET MVC, j'essaie de créer un lien qui inclut une balise d'ancrage (c'est-à-dire qui dirige l'utilisateur vers une page et une section spécifique de la page).

L'URL que j'essaie de créer devrait ressembler à ce qui suit :

<a href="stackoverflow.com/category/subcategory/1#section12">Title for a section on the page</a>

Mon itinéraire est configuré en fonction de la norme :

routes.MapRoute("Default", "{controller}/{action}/{categoryid}"); 

La syntaxe du lien d'action que j'utilise est la suivante :

<%foreach (Category parent in ViewData.Model) { %>
<h3><%=parent.Name %></h3>
<ul>
<%foreach (Category child in parent.SubCategories) { %>
    <li><%=Html.ActionLink<CategoryController>(x => x.Subcategory(parent.ID), child.Name) %></li>
<%} %>
</ul>
<%} %>

Ma méthode de contrôle est la suivante :

public ActionResult Subcategory(int categoryID)
{
   //return itemList

   return View(itemList);
}

La procédure ci-dessus renvoie correctement l'URL suivante :

<a href="stackoverflow.com/category/subcategory/1">Title for a section on the page</a>

Je ne parviens pas à trouver comment ajouter la fonction #section12 partie. Le mot "section" est simplement la convention que j'utilise pour diviser les sections de la page, et le 12 est l'ID de la sous-catégorie, c'est-à-dire child.ID.

Comment faire ?

279voto

Brad Wilson Points 22910

Il existe des surcharges d'ActionLink qui prennent une valeur de fragment paramètre. En passant "section12" comme fragment, vous obtiendrez le comportement recherché.

Par exemple, en appelant Méthode LinkExtensions.ActionLink (HtmlHelper, String, String, String, String, String, String, Object, Object) :

<%= Html.ActionLink("Link Text", "Action", "Controller", null, null, "section12-the-anchor", new { categoryid = "blah"}, null) %>

97voto

LorenzCK Points 2819

Je construirais probablement le lien manuellement, comme ceci :

<a href="<%=Url.Action("Subcategory", "Category", new { categoryID = parent.ID }) %>#section12">link text</a>

17voto

PussInBoots Points 1129

Je ne sais plus dans quelle version de ASP.NET MVC (ASP.NET MVC 3+ je crois) / Razor la fonction parameterlabeldeclaration ou quel que soit son nom (parameter : x) a été introduite, mais pour moi c'est vraiment la bonne façon de construire un lien avec une ancre en ASP.NET MVC.

@Html.ActionLink("Some link text", "MyAction", "MyController", protocol: null, hostName: null, fragment: "MyAnchor", routeValues: null, htmlAttributes: null)

Même l'argument anti-modèle d'Ed Blackburns, qui a été utilisé dans le cadre d'un projet de recherche, n'a pas été retenu. cette réponse peut rivaliser avec cela.

15voto

Zapnologica Points 1296

J'ai procédé de la manière suivante :

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

1voto

Clark Kent Points 5845

Voici un exemple concret

@Html.Grid(Model).Columns(columns =>
    {
           columns.Add()
                   .Encoded(false)
                   .Sanitized(false)
                   .SetWidth(10)
                   .Titled(string.Empty)
                   .RenderValueAs(x => @Html.ActionLink("Edit", "UserDetails", "Membership", null, null, "discount", new { @id = @x.Id }, new { @target = "_blank" }));

  }).WithPaging(200).EmptyText("There Are No Items To Display")

Et la page cible a des TABS

<ul id="myTab" class="nav nav-tabs" role="tablist">

        <li class="active"><a href="#discount" role="tab" data-toggle="tab">Discount</a></li>
    </ul>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X