传递原始控制器和动作名称 - mvc

时间:2010-11-09 10:28:50

标签: asp.net-mvc

我有一个包含以下代码的水果的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。

什么应该是一个有效的解决方法?

1 个答案:

答案 0 :(得分:1)

在调用AJAX操作时,您可以将原始ViewContext.RouteData.Values["action"]作为参数传递。通过这种方式,操作可以知道原始操作是什么,并将其存储在模型中(或者像您的情况中的ViewData,我看到您的视图不是强类型的)。现在你的标记可以变成:

<% Html.RenderPartial(
    "PagerAjax", 
    (Pager)ViewData["pager"], 
    new ViewDataDictionary() { { "originalAction", ViewData["originalAction"] } }
); %>