在ASP.NET MVC中为AJAX调用切换控制器上下文

时间:2010-01-21 00:24:18

标签: asp.net-mvc jquery

也许这是不可能的,但无论如何我想我会问。我正在研究一个广泛使用jquery / AJAX的ASP.NET MVC应用程序。执行的AJAX任务之一是调用控制器操作,该操作返回一个URL以将用户重定向到。

我想做的是在进行AJAX调用时使用与当前页面相同的控制器上下文。原因是因为AJAX调用的控制器动作使用了Url.Action()方法,我需要它使用与当前页面当前使用的相同的路由值。

例如,如果用户当前在:/Site/Search/Advanced/Widgets/Black and Blue/1/Descending,则映射到Site/Search/Advanced/{objectType}/{query}/{pageNum}/{displayMethod}的路由,{objectType}默认为“汽车”(不是“小工具”)。< / p>

我希望拨打Url.Action("Advanced", "Search", new {query="Something else"})来生成/Site/Search/Advanced/Widgets/Something else/1/Descending

就目前而言,调用将生成/Site/Search/Advanced/Cars/Something else,因为控制器没有它所处的上下文。

我的另一种选择是直接在Url.Action调用中指定其他参数,但是这需要更多的复杂性,因为各种隐藏字段进出jquery AJAX的值,这将是一个巨大的混乱。 ..

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

假设您在每个ajax调用上 希望您未指定的路由值与原始非Ajax请求中的路由值相同,您可以随时进行使用ViewContext.RouteData将额外参数添加到ajax调用中。返回ajax调用时,使用路由数据添加到异步加载结果中的任何新链接。

另一种方法是使用Session对象来跟踪最后一个请求,并在发送新请求时更改值。

另一方面,我想质疑你的目标(如果这个搜索场景是你的实际场景):如果我搜索某些东西,浏览到第4页,然后输入一个新的搜索词,我不指望转到新搜索结果的第4页 - 我期待第一页(虽然我确实希望保留我选择的排序顺序......)。