2009-05-13 4 views
0

Я создаю расширение HtmlHelper, которое должно создать набор ссылок, указывающих на текущий URL-адрес, но в качестве первого параметра они имеют другой код языка. Языковые коды передаются в виде списка.Создать URL-адрес из HtmlHelper

В настоящее время я требую UrlHelper быть передано и сделать следующее:

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

Тогда я строка заменить так «{0}» может быть заменена набором языковых кодов у меня есть.

Это конечно, но уродливое по множеству причин. Но я не знаю, как еще я могу сгенерировать эти URL-адреса с помощью HtmlHelper. Любые предложения?

ответ

1

Я бы создать помощника для этого ...

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); 
} 

.. то в вашей главной странице (или где) ...

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

Они будут ссылаться на тот же контроллер/action &, но будет добавлен код языка. Чтобы получить их для создания дружественного URL-адреса, вы можете добавить это над маршрутом по умолчанию.

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

(С этим маршрутом, вы не в состоянии соответствовать всем контроллерам с именем 2 символов, но это, вероятно, хорошо).

Смежные вопросы