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