2010-11-09 85 views
0

我有水果的ASCX控制包含下面的代碼:路過原來的控制器和動作名稱 - MVC

<div id = "fruits"> 

.... 
Ajax stuff1 UpdateTargetId = "fruits" 
Ajax stuff2 UpdateTargetId = "fruits" 

<%Html.RenderPartial("PagerAjax", (Pager)ViewData["pager"]); %> 
</div> 

現在這種水果的控制可以在許多網頁的出現,尋呼機需要知道什麼用戶打開的頁面,以便它可以相應地拉取下一組水果。例如,如果我在紅色水果頁面上,那麼PagerAjax應該知道我只是拉出紅色水果。所以,基本上我需要知道ControllerName(假設它是家)和actionName(假設它是redFruits())。 (實例似乎效率不高,但它使真正的目的意義)。現在,我可以做這樣的事情:

<%Html.RenderAction("PagerAjax", (Pager)ViewData["pager"], ViewContext.RouteData.Values["action"], controllerFilter = ViewContext.RouteData.Values["controller"] }); %> 

然而,正如你注意到了,上面的RenderAction是被阿賈克斯更新DIV中回調,這意味着它將包含Ajax內容的操作和控制器,而不是原始URL。

什麼應該是有效的解決方法?

回答

1

當您調用您的AJAX操作時,您可以傳遞原始ViewContext.RouteData.Values["action"]作爲參數。這種方式行動知道什麼是原始行動,並將其存儲在模型(或視圖數據,因爲你的情況我看你的意見不強類型)。現在,您的標記可能會成爲:

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

但Html.RenderPartial是那將阿賈克斯stuff1或阿賈克斯stuff2,這意味着計算機[「originalAction」]將空更新的DIV中。因此,對於更新水果div的每個Ajax調用,我都應該傳遞ViewData [「originalAction」],以便它可以再次設置ViewData [「originalAction」],對不對? – TPR 2010-11-09 22:12:28

+0

是的,您需要每次在AJAX操作中設置ViewData [「originalAction」] = originalAction'。 'originalAction'參數需要在每次AJAX調用時傳遞,當然會始終指向相同的值,因爲父頁面不會更改。 – 2010-11-09 22:28:42

相關問題