2014-02-21 30 views
2

我有一個基於ASP.NET MVC4的Web應用程序,我在其中使用包含三種語言標誌(圖像)的佈局。這些標誌在整個網站中都可見。現在我想用這些圖像進行語言選擇。爲了以特定語言顯示任何頁面,我只需要向當前URL添加一個參數並加載它,然後我的控制器對它進行評估並在模型中設置正確的語言(或者在存在時設置默認的回退語言在請求中沒有指定語言)。如何將一個參數添加到視圖中的當前URL?

下面是一個例子(hxxp = HTTP):

沒有語言規定:

hxxp://mysite.com?StationId=12 

語言規定:

hxxp://mysite.com?StationId=12&lang=1033 

我的問題是:我怎麼能形成一個鏈接我圍繞語言標記圖像的佈局,並始終指向當前加載的所有參數的URL 加上一個新參數&lang=1033分別是?lang=1033如果只有語言參數?

換句話說:如何使用所有參數創建到同一頁面的鏈接,並簡單地向URL添加路由值?

更新:這裏有一個詳細的例子

在我_Layout.cshtml我:

@{ 
var u_eng = new RouteValueDictionary(Url.RequestContext.RouteData.Values); 
var u_deu = new RouteValueDictionary(Url.RequestContext.RouteData.Values); 
var u_por = new RouteValueDictionary(Url.RequestContext.RouteData.Values); 
u_eng.Add("lang", "1033"); 
u_deu.Add("lang", "1031"); 
u_por.Add("lang", "1046"); 
} 
. 
. 
. 
<li> 
    <a href="@Url.RouteUrl(u_por)" class="Flag BR">BR</a> 
</li> 
<li> 
    <a href="@Url.RouteUrl(u_eng)" class="Flag US">US</a> 
</li> 
<li> 
    <a href="@Url.RouteUrl(u_deu)" class="Flag DE">DE</a> 
</li> 

現在,當我運行的網站,在起始頁工作的聯繫就好了,它們指向當前頁面並將lang = xy參數添加到相應的URL。

但是,當我去使用非常相同的佈局文件,並且也使用一個參數另一個頁面,鏈接沒有得到正確生成:假設我去由該URL定義的子頁面:

http://localhost:1234/Stations?position=up 

頁面本身得到正確顯示。但是,當我將鼠標懸停或遵循語言的聯繫,他們指出:的

http://localhost:1234/Stations?lang=1031代替

http://localhost:1234/Stations?position=up&lang=1031

正如你所看到的,省略任何現有的參數。

回答

6

您可以使用當前路由值集合,爲其添加新值,然後使用url幫助程序RouteUrl生成該URL。爲了收集傳遞給你可以遍歷throught的HttpContext.Request.QueryString詞典頁面查詢字符串參數:

@{ 
    var currentRouteValues = new RouteValueDictionary(Url.RequestContext.RouteData.Values); 
    var queryString = Request.QueryString; 
    foreach (var key in queryString.AllKeys) 
    { 
     currentRouteValues.Add(key, queryString[key]); 
    } 

    currentRouteValues.Add("lang", "1033"); 
} 

然後使用它是這樣的:

@Url.RouteUrl(currentRouteValues) 
+0

這正是我一直在尋找。謝謝! – Robert

+0

糟糕...不幸的是,它沒有按預期工作:我從上面構建了代碼到我的佈局文件中,我使用@Url。RouteUrl(currentRouteValues)作爲一個「a」標籤中的href,但它似乎只會構建一次,然後它不會「識別」任何子頁面上的任何現有路由值,只會設置「lang」參數。 – Robert

+1

@羅伯特,你可以請張貼代碼嗎?我不確定我是否瞭解問題 – Andrei

相關問題