Asp.net mvc ASP.NET MVC3可以';t解析jQuery$.ajax()发送的列表类型的URL参数

Asp.net mvc ASP.NET MVC3可以';t解析jQuery$.ajax()发送的列表类型的URL参数,asp.net-mvc,asp.net-mvc-3,jquery,asp.net-ajax,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc 3,Jquery,Asp.net Ajax,Asp.net Mvc Routing,jQuery$.ajax()以“params[]=…”的形式发送URL参数值列表 ASP.NET MVC 3无法分析控制器操作中的这些参数,因为它们是以“params[]”名称传递的 此类参数的示例为“目标%5b%5d=486F6D655C486F6D655C50656E67756E732E6A7067” 我可以在自己的$.ajax()调用中添加“traditional:true”,但现在来自外部插件的ajax调用我无法更改 有没有办法让ASP.NET MVC3理解发送值列表的“非传统”URL参

jQuery$.ajax()以“params[]=…”的形式发送URL参数值列表

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

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

我可以在自己的$.ajax()调用中添加“traditional:true”,但现在来自外部插件的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)
{
    ...
}
或者,如果希望将模型绑定器应用于所有字符串数组操作参数,请在应用程序_Start中全局注册该绑定器:

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

您可以编写自定义模型活页夹:

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)
{
    ...
}
或者,如果希望将模型绑定器应用于所有字符串数组操作参数,请在应用程序_Start中全局注册该绑定器:

ModelBinders.Binders.Add(typeof(string[]), new MyModelBinder());
但是如果有列表而不是数组呢?但是如果有列表而不是数组呢?