2010-08-17 38 views
1

我通過母版頁中的更改語言控件本地化網站。我需要使用每種不同語言的當前網址呈現控件。如何獲取當前動作的URL(修改某些路由數據後)?

所以,如果你對http://site.com/EN /首頁/關於你改變語言爲法語,我需要爲你指點http://site.com/FR /首頁/公司。

本地化代碼工作路線數據語言屬性,所以我一直在試圖找出我怎麼能:

  1. 獲取訪問當前的行動(所有原始參數)
  2. 獲取當前操作的URL(包含所有原始參數)和路由數據更改。

任何人都可以指向正確的方向嗎?

我試過從父母ViewContext到UserControl,這讓我獲得路由數據,但我無法弄清楚如何從中獲取語言路由的URL。

回答

0

我對此並不是100%滿意,我還沒有到完全測試這種影響的階段,但這是我到目前爲止的目標。如果你有更好的解決方案,請回答。

我從主頁面傳遞ViewContext,以便從當前所處的任何網址獲取具有路由數據的ViewContext。

private string GetLocalisedUrl(ViewContext viewContext, string language) 
{ 
    viewContext.RouteData.DataTokens[LANGUAGE_ROUTEDATA_KEY] = language; 
    UrlHelper helper = new UrlHelper(viewContext.RequestContext); 

    return helper.Action(viewContext.RouteData.Values["action"].ToString(), viewContext.RouteData.Values["controller"].ToString(), viewContext.RouteData.DataTokens); 
} 
0

我在我正在本地工作的網站上運行這個,它似乎工作。有可能是一個更清潔的方式。

HttpRequestBase hrb = HttpContext.Request; 
System.Uri url = hrb.Url; 
string[] test = url.AbsoluteUri.Split('/'); 
int nIndex = 0, nCounter = 0; 
foreach(string str in test) 
{ 
    if (str.Contains("site.com")) 
    { 
    nIndex = nCounter; 
    break; 
    } 
    nCounter++; 
} 
string strLanguage = test[nIndex + 1]; 

很明顯,+1甚至可以進入IF語句,但我認爲它並不是那麼好。希望這有助於一些。

+0

感謝您的建議,但我正在尋找一個MVC路由解決方案,而不是一個手動的URL重寫解決方案。 – 2010-08-17 19:26:32

+0

是的,我不確定如何在控制器前面實際抓取任何東西。如果可能的話,那麼我認爲在Global文件中需要一個具有{語言}/{控制器}/{動作}的文件,但目前我無法給你一個實際的例子。 – XstreamINsanity 2010-08-17 21:18:01