2009-09-15 36 views
2

我正在實現一個搜索模塊,並且支持結果頁面分頁。 NerdDinner提供的示例將pagenumber作爲Index操作的參數傳遞,並且每次用戶擊中不同的頁碼時,操作都使用pagenumber來執行查詢。保存.net mvc中的數據

我的問題是,我的搜索需要更多的標準,如價格,材料,型號等,而不僅僅是簡單的pagenumber。因此,我想在用戶第一次提交後保留標準,這樣我只需要來回傳遞頁碼。

使用ViewData是不可能的,因爲ViewData一旦被髮送到View就會被清除。

是否有任何好的方法來保存標準數據,我希望?

回答

2

你幾乎有兩種方法來做到這一點。

  1. 將要保留的數據放入可序列化會話,緩存或數據庫中。將它放入數據庫將是最安全的選擇,但會降低性能。

  2. 您可以將保存的數據存儲在隱藏的html標記中。只要信息不敏感,這個選項應該運行良好。

這是一些支持代碼。你只能在同一控制器中使用這個

public class questionController : Controller 
{ 
    public QuestionFormData qdata; 

    protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     qdata = (SerializationUtil.Deserialize(Request.Form["qdata"]) 
      ?? TempData["qdata"] 
      ?? new QuestionFormData()) as QuestionFormData; 
     TryUpdateModel(qdata); 
    } 

    protected override void OnResultExecuted(ResultExecutedContext filterContext) 
    { 
     if (filterContext.Result is RedirectToRouteResult) 
     { 
      TempData["qdata"] = qdata; 
     } 
    } 

訪問更新信息,這樣

public ActionResult Index() 
    { 
     DateTime d = qdata.date; 
    } 

在aspx頁面

<%= Html.Hidden("qdata", SerializationUtil.Serialize(Model)) %> 
+1

@luke:我更喜歡#2在我自己的工作。 @Wei Ma:很多人會認爲最好反覆傳遞信息(這不是太重要),而不是使用會話,這會帶來它自己的挑戰。 –

+0

感謝盧克和大衛。我不喜歡在控制器和視圖之間來回傳遞數據。但大衛把我吵醒了。畢竟,數據的大小不會超過幾百個字節。也許甚至沒有http開銷那麼多。 –

+0

什麼是SerializationUtil命名空間? –