visual studio net mvc framework asp asp.net-mvc

asp.net-mvc - studio - mvc asp.net c#



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

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

<ul id="myTab" class="nav nav-tabs" role="tablist"> <li class="active"><a href="#discount" role="tab" data-toggle="tab">Discount</a></li> </ul>

En ASP.NET MVC, intento 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 intento crear debe tener el siguiente aspecto:

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

Mi ruta está configurada con el estándar:

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

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

<%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> <%} %>

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:

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

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?



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

<a class="btn yellow" href="/users/Create/@Model.Id" target="_blank"> Add As User </a>


Lo acabo de hacer así:

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


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 :)


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.


Probablemente construiría el enlace manualmente, así:

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