我有一个包含以下代码的水果的ascx控件:
<div id = "fruits">
....
Ajax stuff1 UpdateTargetId = "fruits"
Ajax stuff2 UpdateTargetId = "fruits"
<%Html.RenderPartial("PagerAjax", (Pager)ViewData["pager"]); %>
</div>
现在这个水果控件可以出现在许多网页上,寻呼机需要知道用户所在的页面,以便它可以相应地提取下一组水果。例如,如果我在红色水果页面上,那么PagerAjax应该知道我只是抽出红色水果。所以,基本上我需要知道ControllerName(假设它是home)和actionName(假设它是redFruits())。 (示例似乎效率低下,但它对于真正的目的是有意义的。)现在,我可以这样做:
<%Html.RenderAction("PagerAjax", (Pager)ViewData["pager"], ViewContext.RouteData.Values["action"], controllerFilter = ViewContext.RouteData.Values["controller"] }); %>
但是,正如您所注意到的,上面的RenderAction位于由Ajax回调更新的div内部,这意味着它将包含Ajax内容的操作和控制器,而不是原始URL。
什么应该是一个有效的解决方法?
答案 0 :(得分:1)
在调用AJAX操作时,您可以将原始ViewContext.RouteData.Values["action"]
作为参数传递。通过这种方式,操作可以知道原始操作是什么,并将其存储在模型中(或者像您的情况中的ViewData,我看到您的视图不是强类型的)。现在你的标记可以变成:
<% Html.RenderPartial(
"PagerAjax",
(Pager)ViewData["pager"],
new ViewDataDictionary() { { "originalAction", ViewData["originalAction"] } }
); %>