2009-05-13 11 views
0

Je crée une extension HtmlHelper qui devrait créer un ensemble de liens pointant vers l'URL actuelle, mais dont le premier paramètre est un code de langue différent. Les languagecodes sont passés en liste.Créer une URL depuis HtmlHelper

Actuellement je redemanderai l'UrlHelper à passer et procédez comme suit:

/*Warning: HACK*/ 
RouteValueDictionary vals = html.ViewContext.RouteData.Values; 
vals["siteLanguage"] = "replaceMe"; 
string siteLanUrl = url.RouteUrl(vals).Replace("replaceMe", "{0}"); 
/*ENDHACK*/ 

Ensuite, je fais une chaîne de remplacement si la « {0} » peut être remplacé par l'ensemble des codes linguistiques que j'ai.

Ceci est bien sûr, mais moche pour une multitude de raisons. Mais je ne sais pas comment je pourrais générer ces URL avec le HtmlHelper. Des suggestions?

Répondre

1

Je créerais une aide pour cette ...

public static string LanguageLink(this HtmlHelper html, string text, string languageCode) 
{ 
    var routeValues = new RouteValueDictionary(html.ViewContext.RouteData.Values); 
    routeValues["languageCode"] = languageCode; 

    string action = routeValues["action"].ToString(); 
    return html.ActionLink(text, action, routeValues); 
} 

.. puis dans la page principale (ou ailleurs) ...

<%= Html.LanguageLink("English", "en") %> 
<%= Html.LanguageLink("Spanish", "es") %> 
<%= Html.LanguageLink("German", "de") %> 
<%= Html.LanguageLink("French", "fr") %> 

Ceux-ci seront un lien vers le même contrôleur/action & valeurs de route mais ajouteront le code de langue. Pour que ceux-ci génèrent une URL conviviale, vous pouvez ajouter ce au-dessus de l'itinéraire par défaut.

routes.MapRoute(
    "languageRoute",          
    "{languageCode}/{controller}/{action}/{id}",   
    new { controller = "Home", action = "Index", id = "" }, 
    new { languageCode = @"\w{2}" } 
); 

(Avec cette route, vous ne seriez pas en mesure de faire correspondre tous les contrôleurs avec un nom de 2 caractères, mais c'est probablement très bien).

Questions connexes