1

jQuery $ .ajax()は、URLパラメータ値のリストを "params [] = ....."彼らは「paramsは[]」の名前で渡されるため

ASP.NET MVC 3は、コントローラのアクションでこれらのパラメータを解析できない

このようなパラメータの例は、「ターゲット%5B%の5D = 486F6D655C486F6D655C50656E6775696E732E6A7067」

あります

私は自分の$ .ajax()呼び出しに "traditional:true"を追加することができましたが、変更できない外部プラグインからのajax呼び出しが行われました。

ASP.NET MVC3に値リストを送信する「従来のものではない」URLパラメータを理解させる方法はありますか?

更新:別のグローバルjQueryプロパティ「jQuery.ajaxSettings.traditional = true;」も見つかりました。それも試してみます。

答えて

4

カスタムモデルバインダー書くことができます:

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()); 
+0

ただし、配列の代わりにリストがある場合はどうなりますか? –

関連する問題