2010-01-21 22 views
0

也許,這是不可能的,但我想我會問反正。我正在研究一個廣泛使用jQuery/AJAX的ASP.NET MVC應用程序。執行的AJAX任務之一是對控制器操作的調用,該操作返回將用戶重定向到的URL。開關控制器上下文的AJAX調用

我想這樣做的是具有相同的控制器上下文進行AJAX調用的時候,我在當前頁面上做。原因是因爲AJAX調用的控制器操作使用Url.Action()方法,我需要它使用與當前頁面上當前使用的相同的路由值。例如,如果用戶當前在:/Site/Search/Advanced/Widgets/Black and Blue/1/Descending,映射到Site/Search/Advanced/{objectType}/{query}/{pageNum}/{displayMethod}的路由,{objectType}默認爲「Cars」(而不是「Widgets」)。

我想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

假設你每個Ajax調用希望你沒有指定是一樣的,在原非Ajax請求路線值,你總是可以利用ViewContext.RouteData到額外的參數添加到ajax呼叫。當返回ajax調用時,您可以使用路由數據添加到異步加載結果中的任何新鏈接。

另一種方法是使用Session對象跟蹤的最後一個請求,並更改值,如果新的發送。另一方面,我想質疑你的目標(如果這個搜索場景是你的實際場景):如果我搜索了一些東西,瀏覽到第4頁,然後輸入一個新的搜索字詞,我不知道期望去到新的搜索結果的第4頁 - 我期望第一頁(儘管我希望保留我選擇的排序順序......)。

+0

你即將頁碼註釋正確;那是我的一個錯字。我決定結合你的兩個建議(在會話中存儲必要的路線數據值)。謝謝你的幫助! – Pedro 2010-01-21 01:02:48