Este dilema se puede solucionar de diversas formas, por lo tanto te mostramos la resolución más completa en nuestra opinión.
Solución:
Así que terminé solucionando este problema anulando cómo funciona el asistente de etiquetas de anclaje y asegurándome de que siempre pase en la cultura desde la ruta.
Este es el asistente de etiquetas personalizadas:
[HtmlTargetElement("a", Attributes = ActionAttributeName)]
[HtmlTargetElement("a", Attributes = ControllerAttributeName)]
[HtmlTargetElement("a", Attributes = AreaAttributeName)]
[HtmlTargetElement("a", Attributes = PageAttributeName)]
[HtmlTargetElement("a", Attributes = PageHandlerAttributeName)]
[HtmlTargetElement("a", Attributes = FragmentAttributeName)]
[HtmlTargetElement("a", Attributes = HostAttributeName)]
[HtmlTargetElement("a", Attributes = ProtocolAttributeName)]
[HtmlTargetElement("a", Attributes = RouteAttributeName)]
[HtmlTargetElement("a", Attributes = RouteValuesDictionaryName)]
[HtmlTargetElement("a", Attributes = RouteValuesPrefix + "*")]
public class CultureAnchorTagHelper : AnchorTagHelper
private const string ActionAttributeName = "asp-action";
private const string ControllerAttributeName = "asp-controller";
private const string AreaAttributeName = "asp-area";
private const string PageAttributeName = "asp-page";
private const string PageHandlerAttributeName = "asp-page-handler";
private const string FragmentAttributeName = "asp-fragment";
private const string HostAttributeName = "asp-host";
private const string ProtocolAttributeName = "asp-protocol";
private const string RouteAttributeName = "asp-route";
private const string RouteValuesDictionaryName = "asp-all-route-data";
private const string RouteValuesPrefix = "asp-route-";
public CultureAnchorTagHelper(IHtmlGenerator generator, IHttpContextAccessor contextAccessor) : base(generator)
var culture = contextAccessor.HttpContext.Request.RouteValues["culture"]?.ToString() ?? "en";
RouteValues["culture"] = culture;
Para usarlo, debe eliminar el asistente de etiqueta de anclaje predeterminado y agregar el suyo propio en _ViewImports.cshtml
:
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@removeTagHelper Microsoft.AspNetCore.Mvc.TagHelpers.AnchorTagHelper, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, Your.Assembly.Namespace //assembly name containing class above
Algunos enlaces útiles:
- código fuente de la etiqueta de anclaje
- ayudantes de etiquetas
- extender ayudantes de etiquetas
Si conservas algún incógnita o capacidad de limar nuestro noticia te inspiramos ejecutar una crónica y con placer lo ojearemos.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)