繁体   English   中英

ASP.NET MVC3无法解析jQuery $ .ajax()发送的列表类型的URL参数

[英]ASP.NET MVC3 can't parse URL parameter of a list type sent by jQuery $.ajax()

jQuery $ .ajax()将URL参数值列表发送为“params [] = .....”

ASP.NET MVC 3无法在控制器的操作中解析这些参数,因为它们以“params []”名称传递

此类参数的示例为“目标%5b%5d = 486F6D655C486F6D655C50656E6775696E732E6A7067”

我能够将“traditional:true”添加到我自己的$ .ajax()调用中,但现在来自外部插件的ajax调用我无法更改。

有没有办法让ASP.NET MVC3理解发送值列表的“非传统”URL参数?

更新:我还发现了另一个全局jQuery属性“jQuery.ajaxSettings.traditional = true;” 也会尝试。

你可以写一个自定义模型绑定器:

public class MyModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var values = bindingContext.ValueProvider.GetValue(bindingContext.ModelName + "[]");
        if (values != null)
        {
            return values.RawValue;
        }
        return base.BindModel(controllerContext, bindingContext);
    }
}

接着:

public ActionResult Index([ModelBinder(typeof(MyModelBinder))]string[] targets)
{
    ...
}

或者,如果要将模型绑定应用于所有字符串数组操作参数,请在Application_Start中全局注册模型绑定器:

ModelBinders.Binders.Add(typeof(string[]), new MyModelBinder());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM