Incluyendo una etiqueta de anclaje en ASP.NET MVC Html.ActionLink

En ASP.NET MVC, bash crear un enlace que incluya una etiqueta de anclaje (es decir, dirigir al usuario a una página y una sección específica de la página).

La URL que bash crear debe tener el siguiente aspecto:

Title for a section on the page 

Mi ruta está configurada con el estándar:

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

La syntax del enlace de acción que estoy usando es:

  

  • <%=Html.ActionLink(x => x.Subcategory(parent.ID), child.Name) %>

Mi método de controlador es el siguiente:

 public ActionResult Subcategory(int categoryID) { //return itemList return View(itemList); } 

Lo anterior devuelve correctamente una URL de la siguiente manera:

 Title for a section on the page 

No puedo entender cómo agregar la parte # section12 . La palabra “sección” es solo la convención que estoy usando para dividir las secciones de la página, y la 12 es la ID de la subcategoría, es decir, child.ID.

¿Cómo puedo hacer esto?

Probablemente construiría el enlace manualmente, así:

 #section12">link text 

Hay sobrecargas de ActionLink que toman un parámetro de fragmento . Pasar “section12” como fragmento te dará el comportamiento que buscas.

Por ejemplo, llamando a LinkExtensions.ActionLink Method (HtmlHelper, String, String, String, String, String, String, Object, Object) :

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

No recuerdo en qué versión de ASP.NET MVC (ASP.NET MVC 3+ creo) / Razor the parameterlabeldeclaration o como se llame (parámetro: x) se presentó la característica, pero para mí esta es definitivamente la forma correcta de construir un enlace con un ancla en ASP.NET MVC.

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

Ni siquiera el argumento antipatrónio de Ed Blackburns de esta respuesta puede competir con eso.

Lo acabo de hacer así:

 Features 

Aquí está el ejemplo de la vida real

 @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") 

Y la página de destino tiene TABS

  

Mi solución funcionará si aplica ActionFilter al método de acción Subcategoría, siempre que siempre desee redirigir al usuario al mismo marcador:

http://spikehd.blogspot.com/2012/01/mvc3-redirect-action-to-html-bookmark.html

Modifica el búfer HTML y genera una pequeña parte de javascript para indicar al navegador que agregue el marcador.

Puede modificar el javascript para desplazarse manualmente, en lugar de utilizar un marcador en la URL, ¡por supuesto!

Espero eso ayude 🙂

Hice eso y funciona para redireccionar a otra vista Creo que si agrega #sectionLink después Funcionará

  Add As User