2011-12-05 87 views
0

我試圖找出將過濾應用到我已在主/索引視圖(MVC3)中顯示的webgrid的最佳方式(盡力而爲)。MVC3 webgrid過濾建議?

我添加了一個multiselet,允許按特定列過濾,我想捕獲每個選擇項的click事件(我已經實現並工作),然後以某種方式重新調用我的Index()方法,其中包含所有代碼根據是否從過濾器調用(多選)重建視圖。

什麼是最好的方式去做這件事?我知道這是一個廣泛的問題,但任何信息將不勝感激。

謝謝!

回答

1

您可以在表單中放置多選。然後,你有2種可能性提交這種形式:

  1. 使用一個提交按鈕
  2. 使用多選的onchange事件(在這種情況下,你將不得不使用JavaScript)

第一點很簡單:

@using (Html.BeginForm()) 
{ 
    @Html.ListBoxFor(x => x.SelectedItems, Model.Items) 
    <button type="submit">Filter</button> 
} 

要實現第二個,你可以使用jQuery並訂閱multiselect的change事件。首先,讓我們給這個多選一個id,使我們可以更容易地選擇它:在一個單獨的JavaScript文件

@using (Html.BeginForm()) 
{ 
    @Html.ListBoxFor(x => x.SelectedItems, Model.Items, new { id = "filter" }) 
} 

然後:

$(function() { 
    $('#filter').change(function() { 
     // when the selection changes we manually trigger the submission 
     // of the containing form 
     $(this).closest('form').submit(); 
    }); 
}); 

在這兩種情況下,我們正在提交給控制器動作將採用一個字符串數組作爲參數,它將表示多選中將用於過濾結果集的選定值。

+0

太棒了。非常感謝! – Mariah

+0

QQ:不要劫持這篇文章或超出範圍,但是如果我有另一個多選,filter2,並且想要在filter1中選擇某個項目時除了filter1的選定值之外還要獲取它的選定值? – Mariah

+0

@Mariah,在第一個過濾器的更改事件中,可以使用$('#filter2')。val()'讀取第二個過濾器的選定值。由於filter2是一個多選,這將返回一個數組值。 –