ASP.NET MVC3 не может проанализировать параметр URL-адреса типа списка, отправленного jQuery $ .ajax () - PullRequest
1 голос
/ 17 сентября 2011

jQuery $ .ajax () отправляет список значений параметров URL как «params [] = .....»

ASP.NET MVC 3 не может проанализировать эти параметры в действии контроллера, потому что они передаются с именем "params []"

Примером такого параметра является "target% 5b% 5d = 486F6D655C486F6D655C50656E6775696E732E6A7067"

Мне удалось добавить «традиционный: true» в мои собственные вызовы $ .ajax (), но теперь вызовы ajax поступают из внешнего плагина, который я не могу изменить.

Есть ли способ заставить ASP.NET MVC3 понимать «нетрадиционные» параметры URL, который отправляет список значений?

ОБНОВЛЕНИЕ: я также нашел другое глобальное свойство jQuery "jQuery.ajaxSettings.traditional = true;" попробую тоже.

1 Ответ

4 голосов
/ 17 сентября 2011

Вы можете написать пользовательский подшиватель модели:

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());
...