2011-05-19 36 views
2

我有一個頁面包含一個帶有ActionLink的客戶端列表,允許用戶顯示(或隱藏)「非活動」客戶端。 showInactive=True作爲查詢字符串連接到控制器。在顯示「非活動」客戶端後,我編輯其中一個客戶端,但是當我保存任何更改或返回列表時,查詢字符串消失。在這些請求中堅持查詢字符串的最佳方式是什麼?我已經嘗試了TempData字典,但顯然我試圖將它用於未設計處理的東西。MVC中的請求持續查詢字符串3

+0

如果您向我們顯示您的控制器代碼,回答此問題可能會更容易。 – 2011-05-19 00:49:09

+1

尊重,我的描述的哪一部分你不明白?如果您創建一個新的MVC項目,這是默認行爲。 – 2011-05-19 01:48:59

回答

5

一種簡單的方式來實現,這是添加returnUrl參數到你的動作(一個或多個),例如:

[HttpPost] 
public ActionResult Edit(int id, ClientEditModel model, string returnUrl) 
{ 
    if (!ModelState.IsValid) return View(); 
    try 
    { 
     // do something 
     return Redirect(returnUrl); 
    } 
    catch 
    { 
     return View(); 
    } 
} 

然後在您的視圖,你可以這樣稱呼你的行爲:

@Html.ActionLink("Edit", "Edit", new { id = Model.Id, returnUrl = Request.RawUrl }) 

在這個設置中,當用戶完成編輯時,她將被帶回到她之前的同一個確切位置,不僅堅持showInactive,而且堅持列表中可能包含的任何其他參數,例如頁碼,搜索標準,排列順序等。

+1

很好的解決方案,謝謝。 – 2011-05-19 06:07:36

+2

真的很不錯的解決方案! :) – 2012-02-25 03:02:12

1

將查詢字符串參數傳遞到您的編輯頁面,並將該值添加爲隱藏表單字段參數。如果它不存在,則默認爲false。通過這種方式,當您執行編輯帖子並進行處理時,您可以將值從綁定模型/ FormCollection /等中提取出來,並根據它的值使用適當的查詢字符串參數值進行重定向。

return this.RedirectToAction("ListClients", new { showInactive = *INSERT THE VALUE* }); 

其轉換爲

/CurrentController/ListClients?showInactive=*value* 
+0

謝謝Khepri - 似乎有點ha to傳遞隱藏的表單域。我希望有一個更清晰的解決方案。 – 2011-05-19 01:50:03

+0

據我所知,沒有。我可以理解使用Session來堅持這一點,以避免傳遞值,將其提供給表單,並在帖子中讀取它的開銷,但我個人而言,我只是將值傳遞給它。 – Khepri 2011-05-19 02:02:44

相關問題