我有一个启用了排序和分页的webgrid。我在同一视图上也有一些下拉列表和列表框来过滤webgrid结果。
过滤器使用http get方法放置在表单内。我在过滤器上应用了jquery以提交表单,因此每次过滤器更改时,表单都会返回,其中所选值为url中的查询字符串。在列表框中选择多个值时,生成的查询字符串看起来像
类型= 1&安培;类型= 3
所以我创建了一个int []类型来接受我的动作中的参数。但是,当我对webgrid进行排序或分页时,查询字符串会被重写为
类型= 1,3&安培;页= 4 ,
在这种情况下,type参数变为null,列表框未被选中并自动修改为“input-validation-error”类。
我实际上更喜欢webgrid生成的查询字符串的样式
类型= 1,3
所以我可以将它直接传递给我的查询。但是,似乎列表框不喜欢这种查询字符串。有没有办法让列表框识别组合的查询字符串,或者我必须编写代码来处理查询字符串和选定的项目?
答案 0 :(得分: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, ...)
答案 1 :(得分:0)
看起来像WebGrid中的一个错误。
我建议您在行动开始时采取以下解决方法:
if(type == null && !string.IsNullOrWhiteSpace(Request.QueryString["type"]))
type=Request.QueryString["type"].Split(',');