使用Url.RouteUrl时,区域丢失

时间:2012-02-01 21:55:17

标签: asp.net-mvc-3 asp.net-mvc-routing

我怀疑我做错了。

由于各种原因,我的应用强制用户在登录后立即做出一些选择。为了确保它们输入必要的数据,我覆盖基本控制器类中的OnActionExecuting方法,以拦截在输入此数据之前执行操作的任何尝试,并将用户重定向到必要的页面。我使用以下代码保留他们尝试执行的操作的URL:

url = Url.RouteUrl("Default", filterContext.RouteData.Values);

(filterContext是一个ActionExecutingContext对象,以及OnActionExecuting的参数。)

我遇到的问题是,如果操作与区域中的控制器相关联,则我获得的URL不会反映该区域。

我从其他帖子中了解到,我可以从RouteData的DataTokens集合中获取区域名称。但我不确定通过它的最佳方式。我想我可以检索它并使用RouteValueDictionary.Add方法将它添加到RouteData.Values(假设值在那时不是只读的;我不知道),但感觉有点......奇怪,就像不知怎的,这一点正在被遗漏。

这真的应该是这样做的吗?在其他地方有什么问题吗,我的RouteData.Values中没有区域?

1 个答案:

答案 0 :(得分:2)

我只是将它从过滤器中的数据标记中取出并将其添加到路由值中。你可以使用RouteValues.Add:

来做到这一点
if (filterContext.RouteData.DataTokens.ContainsKey("area"))
    filterContext.RouteData.Values.Add("area", 
        filterContext.RouteData.DataTokens["area"]);

在MVC2中添加了区域功能,我想这是它不在MVC1中的副作用。但是,只要您的RouteValues包含“区域”键,UrlHelper.RouteUrl就应该为该区域生成正确的URL。

相关问题