Создать URL-адрес из HtmlHelper - PullRequest
0 голосов
/ 13 мая 2009

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

В настоящее время мне требуется передать 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 Ответ

1 голос
/ 13 мая 2009

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

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") %> 

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...