2011-03-30 69 views
1

我曾在一個文化開關控制,我需要修改 ViewContext.RouteData(「文化」),以檢查是否鑑於當我做以下asp.net mvc 3 ViewContext到新的對象,然後更改tempViewContext.RouteData修改原始ViewContext

Dim routeData As RouteData = ViewContext.RouteData 
routeData.Values.Remove("culture") 
routeData.Values.Add("culture", cultureValue) 

那麼原來的ViewContext.RouteData改變當我改變的RouteData存在 反正。

我曾經測試過做以下,但沒有成功

Dim tempViewContext As New ViewContext(ViewContext.Controller.ControllerContext, ViewContext.View, ViewContext.ViewData, ViewContext.TempData, ViewContext.Writer) 
Dim routeData As RouteData = tempViewContext.RouteData 
routeData.Values.Remove("culture") 
routeData.Values.Add("culture", cultureValue) 

不要任何人知道如何ViewContext複製到一個臨時對象,並改變值,而不改變原有ViewContext值?

編輯:我知道工作的唯一方法是更改​​routeData,然後檢查它是否存在,並在 它將routeData更改回到原始文化...正在跳躍有另一種方式,但它爲知道。

回答

0

RouteData應該是隻讀的。如果你想改變文化,你可以創建一個新的請求。因此,舉例來說,如果你有以下途徑:

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{culture}", 
    new { controller = "Home", action = "Index", culture = UrlParameter.Optional } 
); 

您可以發送一個新的請求:/Home/Index/fr-FR將修改相應的路由參數。

這是關於本地化的nice article,我建議您閱讀。

+0

我已經知道這篇文章,但我試圖做的是檢查視圖是否存在即時通訊使用視圖引擎誰使用以下語法〜/視圖/首頁/ fr-FR /索引,我需要知道它是否在建立文化鏈接之前就存在。但是後來我需要routeData使其文化使用Dim viewResult As ViewEngineResult = ViewEngines.Engines.FindView(New ControllerContext(Context,routeData,Controller),viewName,masterName) 返回If(viewResult.View IsNot Nothing,True,False ) – 2011-03-30 11:27:19