加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 绑定一个包含MVC数组的QueryString

发布时间:2020-12-16 07:10:21 所属栏目:asp.Net 来源:网络整理
导读:我正在使用远程加载数据的Telerk Kendo UI网格.传递给我的action方法的QueryString如下所示: – take=10skip=0page=1pageSize=10sort[0][field]=valuesort[0][dir]=asc 我试图找出如何将sort参数绑定到我的方法?是否可以或者我需要手动枚举QueryString集合
我正在使用远程加载数据的Telerk Kendo UI网格.传递给我的action方法的QueryString如下所示: –

take=10&skip=0&page=1&pageSize=10&sort[0][field]=value&sort[0][dir]=asc

我试图找出如何将sort参数绑定到我的方法?是否可以或者我需要手动枚举QueryString集合还是创建自定义绑定器?

到目前为止,我试过这个: –

public JsonResult GetAllContent(int page,int take,int pageSize,string[] sort)

public JsonResult GetAllContent(int page,string sort)

但排序始终为空.有谁知道我怎么能做到这一点?

我可以回退到Request.QueryString使用,但这有点像kludge.

var field = Request.QueryString["sort[0][field]"];
var dir = Request.QueryString["sort[0][dir]"];

解决方法

您可以使用一组字典:

public ActionResult Index(
    int page,IDictionary<string,string>[] sort
)
{
    sort[0]["field"] will equal "value"
    sort[0]["dir"] will equal "asc"
    ...
}

然后定义自定义模型绑定器:

public class SortViewModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext)
    {
        var modelName = bindingContext.ModelName;
        var keys = controllerContext
            .HttpContext
            .Request
            .Params
            .Keys
            .OfType<string>()
            .Where(key => key.StartsWith(modelName));

        var result = new Dictionary<string,string>();
        foreach (var key in keys)
        {
            var val = bindingContext.ValueProvider.GetValue(key);
            result[key.Replace(modelName,"").Replace("[","").Replace("]","")] = val.AttemptedValue;
        }

        return result;
    }
}

将在Global.asax中注册:

ModelBinders.Binders.Add(typeof(IDictionary<string,string>),new SortViewModelBinder());

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读