也许这是不可能的,但无论如何我想我会问。我正在研究一个广泛使用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的值,这将是一个巨大的混乱。 ..
有什么想法吗?
答案 0 :(得分:0)
假设您在每个ajax调用上 希望您未指定的路由值与原始非Ajax请求中的路由值相同,您可以随时进行使用ViewContext.RouteData
将额外参数添加到ajax调用中。返回ajax调用时,使用路由数据添加到异步加载结果中的任何新链接。
另一种方法是使用Session
对象来跟踪最后一个请求,并在发送新请求时更改值。
另一方面,我想质疑你的目标(如果这个搜索场景是你的实际场景):如果我搜索某些东西,浏览到第4页,然后输入一个新的搜索词,我不指望转到新搜索结果的第4页 - 我期待第一页(虽然我确实希望保留我选择的排序顺序......)。