2015-10-06 24 views
2

我遇到了這樣的問題。如何在頁面刷新時傳遞一個字符串?`

場景:

當運行我的行爲我用一個int數組來檢索基於這些ID的數據。這完美的作品,直到你到達視圖。我設法檢索數據的罰款,但每當我刷新頁面,因爲數組是一個複雜的類型,它通過作爲空行動。爲了解決這個問題,我將數組轉換爲字符串,並希望將此值傳遞給頁面刷新上的操作。但是到目前爲止我嘗試過的所有內容都沒有提交價值,這個參數肯定會被填充。這我想傳遞的參數是RPString

操作:

[AuthorizeClientID] 
     [LoggingFilter] 
     public ActionResult SupplierReportSelection(int ClientID, int[] ReviewPeriodID, string RPString, int? GroupID, int? SupplierID = null, bool? Backbtn = null, int? StatusCategoryID = null) { 
      if (TempData["TempReviewPeriod"] != null) { 
       ReviewPeriodID = (int[])TempData["TempReviewPeriod"]; 
      } 
      ClaimsBySupplierViewModel SupplierModel = ClaimsBySupplier(ClientID, ReviewPeriodID, SupplierID, GroupID); 

      ViewBag.client = client; 


      return View("ClaimsBySupplier", SupplierModel); 
     } 

查看:

@if (Model.ReportData.Any()) { 
      Model.RPString = string.Join(",", Model.inputReviewPeriodIDs); 
      Model.RPString = Json.Encode(Model.RPString);   
    //Removed code which isn't needed 
     } 

如果jQuery是也是一種可能性,只是讓我知道。

+0

在第一次成功請求期間數組是如何填充的? –

+0

@WiktorZychla該數組填充了一個下拉列表,這取決於用戶單擊的值 –

+0

不完全是我的意思。我的問題是:傳遞給GET請求的查詢字符串的列表,還是這是一個POST的列表值?無論如何,你有沒有想過只是將它存儲在Session中,以便當它爲空時,從Session中檢索它? –

回答

0

jQuery有unload方法,當用戶正在離開頁面時被調用。

例如,你可以做到以下幾點:

$(window).unload(function() { 
    $.ajax({ 
     method: "<method>", 
     url: "<your url>", 
     data: { RPString: <your desired value> } 
    }) 
}); 
+0

我是否需要將參數傳遞給URL,然後嘗試在動作中檢索它? –

+0

@AndrewKilburn,在這個'unload'回調函數中,你可以向[<主機和控制器名稱>/SupplierReportSelection']發送[ajax](http://api.jquery.com/jquery.ajax/)請求並傳遞你的'RPString '參數。 (如果我正確理解你的問題當然) – ieaglle

0
[AuthorizeClientID] 
     [LoggingFilter] 
     public ActionResult SupplierReportSelection(int ClientID, int[] ReviewPeriodID, string RPString, int? GroupID, int? SupplierID = null, bool? Backbtn = null, int? StatusCategoryID = null) { 
      if (GroupID == null && SupplierID == null && TempData["TempReviewPeriod"] != null) { 
       ReviewPeriodID = (int[])TempData["TempReviewPeriod"]; 

       //The cookie code is used for the page refresh whenever a user performs a search with multiple ReviewPeriod IDs. This is because you cannot pass the ReviewPeriodID array in the URL. 
       Request.Cookies.Remove("RPCookie"); 
       HttpCookie RPCookie = new HttpCookie("RPCookie"); 
       for (int i = 0; i < ReviewPeriodID.Length; i++) { 
        if (ReviewPeriodID.Length - 1 != i) { 
         RPCookie.Value += ReviewPeriodID[i] + ","; 
        } 
        else { 
         RPCookie.Value += ReviewPeriodID[i]; 
        } 
       } 
       Response.Cookies.Set(RPCookie); 
      } 
      else if (GroupID == null && SupplierID == null && TempData["TempReviewPeriod"] == null) { 
       ReviewPeriodID = Request.Cookies.Get("RPCookie").Value.Split(',').Select(n => Convert.ToInt32(n)).ToArray(); 

      } 

      ClaimsBySupplierViewModel SupplierModel = ClaimsBySupplier(ClientID, ReviewPeriodID, SupplierID, GroupID); 

      ViewBag.client = client; 

      return View("ClaimsBySupplier", SupplierModel); 
     } 

我參加了一個建議,從Wiktor的Zychla了以上和使用cookie來存儲數據。每當TempData中有數據時,我都會刪除cookie並重新創建cookie。然後,如果TempData爲空(它將在頁面上刷新),然後將其轉換爲我的參數,然後獲取cookie。

相關問題