2013-03-14 30 views
0

我根本無法在標題中正確描述這一點。如何將複雜對象發送回控制器用於分頁?

我們的產品用戶事件的歷史記錄顯示爲分頁,並且可以設置每頁事件的數量,並根據需要篩選幾列結果。過濾器僅用於單個選擇。例如,將會有一個事件類型的下拉列表,您可以選擇其中的一個並對其進行過濾。我添加了對每個篩選器下拉列表中選擇多個選項的支持,現在分頁不起作用。

它現在所做的是爲每個頁碼,上一頁/下一頁鏈接以及改變每頁事件數量的鏈接生成ActionLink。由於它們只是單選,因此只需將這些值作爲路由值並將它們發送給控制器,然後使用它們爲下一頁返回正確過濾的數據即可。現在我有一個簡單枚舉值的混合(一些下拉菜單仍然是單選)和枚舉值列表。

我正在接收我的頁面上的過濾器數據作爲RouteValueDictionary,因此我必須檢查該值是否爲對象或對象列表,然後才能對它進行任何適當的操作,這會使我感到醜陋。

因此,簡而言之,我需要生成將過濾器選項發送回控制器的鏈接。某些過濾器選項將是一個由字符串鍵入的枚舉,而其中一些將是一個由字符串鍵入的枚舉列表。這些過濾器選項在視圖方面都可以在<string, object>字典中使用。

我只是不知道這樣做的'好'的方法是什麼。

讓我知道你是否需要知道別的。

回答

0

我認爲,當您的過濾器更新時,您需要刷新結果頁面。如果是這樣的話,我會做一些jQuery Ajax來處理整個事情,而不是修改鏈接網址。我轉換到Ajax的原因是因爲創建一個想要發送給服務器的對象很容易,而將複雜的對象作爲查詢字符串發送並不那麼容易。你會有這樣的事情:

$(document).on('click','selector of your filter inputs', function(){ 
    $.Ajax({ 
     url: '/[Controller]/[Action]', 
     type: 'GET', 
     data: { filter1: $('input').val()... }, // however complex object you need 
     success: function(data){ 
      $('selector of the result container').html(data); 
     } 
    }); 
}); 
+0

是的,做阿賈克斯似乎是要走的路。我不到一個月前來到這家公司,這是一個非常基本的網絡應用程序。沒有什麼是Ajax,全部都是全新的刷新。我只是不確定是否會給予'管轄權'來將所有必需的內容都更改爲JavaScript,因爲這需要比我需要做的更長時間才能使其在內部工作的更長時間目前的架構。 – 2013-03-14 23:06:17

相關問題