asp.net-mvc - 将 ExtJs 4 Grid 过滤器信息绑定(bind)到 asp.net mvc 操作参数的最佳方法是什么?

标签 asp.net-mvc grid extjs4

将 ExtJs 4 Grid 过滤器信息绑定(bind)到 asp.net mvc 操作参数的最佳方法是什么?

我写了这些帮助类:

public class ExtFilterInfo
{
    public string Field { get; set; }
    public ExtFilterData Data { get; set; }
}

public class ExtFilterData
{
    public string Type { get; set; }
    public string Value { get; set; }
}

这是行动:
public ActionResult Grid(int start, int limit, string sort, ExtFilterInfo[] filter)

QueryString 看起来像这样:
_dc:1306799668564
filter%5B0%5D%5Bfield%5D:Nome
filter%5B0%5D%5Bdata%5D%5Btype%5D:string
filter%5B0%5D%5Bdata%5D%5Bvalue%5D:nu
page:1
start:0
limit:20

最佳答案

自定义模型活页夹看起来可以满足要求:

public class ExtFilterInfoModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var filter = (ExtFilterInfo)base.BindModel(controllerContext, bindingContext);

        var field = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + "[field]");
        if (field != null)
        {
            filter.Field = field.AttemptedValue;
        }

        var type = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + "[data][type]");
        if (type != null)
        {
            if (filter.Data == null)
            {
                filter.Data = new ExtFilterData();
            }
            filter.Data.Type = type.AttemptedValue;
        }

        var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + "[data][value]");
        if (value != null)
        {
            if (filter.Data == null)
            {
                filter.Data = new ExtFilterData();
            }
            filter.Data.Value = value.AttemptedValue;
        }

        return filter;
    }
}

可以在Application_Start中注册:
ModelBinders.Binders.Add(typeof(ExtFilterInfo), new ExtFilterInfoModelBinder());

现在是 filter您的 Controller 操作作为参数的集合应该正确绑定(bind)。

关于asp.net-mvc - 将 ExtJs 4 Grid 过滤器信息绑定(bind)到 asp.net mvc 操作参数的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6181728/

相关文章:

javascript - 使用两个循环构建具有奇数和偶数字符的 JavaScript 网格

html - 网格布局不均匀

javascript - 拉伸(stretch)选项卡。面板选项卡垂直适合 "center border"

jquery - 通过 jquery $.ajax 发布时的 ASP.NET MVC 验证框架?

c# - 使用 ValidateAntiForgeryToken 自定义授权过滤器订单执行

javascript - 单击对话框上的停止页面处理单元按钮

css - Bootstrap Grid System 新行看起来不太好

ExtJs 4.1 TreeGrid 通过列标题过滤

javascript - 如何在 ExtJS 中滚动到表单末尾

html - 导航栏覆盖 Logo