2011-03-30 45 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