2012-07-17 81 views
0

我有一個啓用了排序和分頁功能的webgrid。我也有一些下拉列表和列表框在同一視圖中過濾webgrid的結果。帶列表框的mvc3 webgrid過濾器

這些過濾器放在一個帶有get方法的表單中。我在過濾器上應用了jquery來提交表單,所以每當過濾器發生變化時,表單都會以url中querystring的形式發回選定的值。當多個值在列表框被選擇時,查詢字符串產生看起來像

類型= 1種&類型= 3

因此,我創建一個INT []類型接受我的動作的參數。然而,當我排序或頁面上的的WebGrid,查詢字符串改寫爲

類型= 1,3 &頁= 4

在這種情況下,類型參數變成零,列表框是未選擇的和經修正的一個「輸入驗證錯誤」類自動。

其實我更喜歡的查詢字符串通過的WebGrid

類型產生的風格= 1,3

這樣我就可以直接將它傳遞到我的查詢。但是,似乎列表框不喜歡這種查詢字符串。有沒有辦法讓列表框識別組合查詢字符串或我必須編寫代碼來處理查詢字符串和選定的項目?

回答

1

感謝。我結束了在定製模型綁定

class MultiSelectionBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     string key = bindingContext.ModelName; 
     ValueProviderResult val = bindingContext.ValueProvider.GetValue(key); 
     if (val != null && !string.IsNullOrEmpty(val.AttemptedValue)) 
     { 
      bindingContext.ModelState.SetModelValue(key, val); 

      string incomingString = ((string[])val.RawValue)[0]; 
      if (incomingString.Contains(",")) 
      { 
       var value = new ValueProviderResult(incomingString.Split(','), string.Empty, CultureInfo.InvariantCulture); 
       bindingContext.ModelState.SetModelValue(key, value); 
       return value.ConvertTo(typeof(int[])); 
      } 

      return val.ConvertTo(typeof(int[])); 
     } 

     return null; 
    } 
} 

做類似的工作,並把它應用到參數

public ViewResult Index([ModelBinder(typeof(MultiSelectionBinder))] int[] type, ...) 
0

看起來像WebGrid中的錯誤。

我會在你的行動開始提出以下解決方法:

if(type == null && !string.IsNullOrWhiteSpace(Request.QueryString["type"])) 
    type=Request.QueryString["type"].Split(',');