Estensione Url.Action in C# per gestire Route multi-language con ASP.NET MVC

Custom Routing and Action Method Names in ASP.NET 5 and ASP.NET MVC 6

Come promesso in questa guida - e richiesto a gran voce dai nostri lettori - pubblichiamo un Extension Method che consente di utilizzare il metodo helper Url.Action all'interno di una View in Razor specificando, in aggiunta ai consueti parametri, un oggetto CultureInfo che verrà utilizzato internamente per costruire una URL localizzata. Ovviamente, affinché la URL venga correttamente gestita dalla nostra applicazione, sarà necessario implementare una Route con supporto multi-language come quella pubblicata in questo post.

Date a questa classe un nome adeguato, come ad esempio UrlHelperExtensions.cs, quindi inseritela in un punto adeguato della vostra applicazione, ad es. all'interno di una cartella /AppCode/ . Ovviamente, dovrete anche includere i namespace necessari all'interno del web.config situato nella directory /Views/ :

Nel nostro esempio il namespace si chiama Ryadel.Web.Mvc.Extensions, ma potete cambiarlo a vostro piacimento.

Una volta creata e impostata correttamente, l'estensione potrà essere utilizzata all'interno di qualsiasi View Razor nel seguente modo:

Nell'esempio l' oggetto CultureInfo viene impostato volutamente a null, in quanto il metodo è pensato per recuperare e utilizzare l'istanza predefinita in quel caso: se avete implementato la logica multi-language seguendo la nostra guida non sarà necessario aggiungere altro.

Nel caso in cui vogliate approfittarne per creare una estensione analoga anche per il metodo Html.ActionLink, potete approfittarne leggendo questo articolo.

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

3 Comments on “Estensione Url.Action in C# per gestire Route multi-language con ASP.NET MVC”

  1. Pingback: Estensione Html.ActionLink per Route multi-language con ASP.NET MVC
  2. Pingback: Impostare un sito web multi-language con ASP.NET MVC
  3. L’implementazione proposta genera il link correttamente solo nella home dopo ripete la variabile esit/it/link ecco come ho risolto io, controllando se nella route c’è già la varibiale lang:

    string localizedControllerName = !helper.RequestContext.RouteData.Values.ContainsKey(“lang”) ? $”{cultureInfo.TwoLetterISOLanguageName}/{controllerName}” : controllerName;

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


The reCAPTCHA verification period has expired. Please reload the page.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.