次のコントローラー アクションへの jquery.ajax 呼び出しを試みています。
public ActionResult Handler(SemanticPart[] semanticParts, string first, string last)
public { get; を持つ対応するサーバー側モデルを持つ次のデータ JSON オブジェクトがあります。設定; } プロパティ:
var data = {
semanticParts: [{ hasLabel: "label", hasType: "type", hasIndex : 0 }],
first: "first",
last : "last"
};
問題は、jQuery.paramにデフォルトの MVC モデル バインダーのシリアル化オプションがないように見えることです。
decodeURIComponent($.param(data))
生成:
"semanticParts[0][hasLabel]=label&semanticParts[0][hasType]=type&semanticParts[0][hasIndex]=0&first=first&last=last"
フラグを次のように設定すると、次のtraditional
ようになりdecodeURIComponent($.param(data, true))
ます。
"semanticParts=[object+Object]&first=first&last=last"
複雑な配列用の MVC の既定のモデル バインダーには、正しくバインドするために次のものが必要です (Fiddler Composer でテスト済み)。
"semanticParts[0].hasLabel=label&semanticParts[0].hasType=type&semanticParts[0].hasIndex=0&first=first&last=last"
単に使用したもの:array[0].property=
代わりにarray[0][property]=
すべてのWebフレームワークで合意されたparam文字列の普遍的な仕様がないことは理解していますが、従来のフラグがtrueに設定されたjQuery.paramが[オブジェクト+オブジェクト]を返す理由は私を超えています...どのフレームワークでもまったく役に立ちません。
これにパッチを当てる方法はありますか?
おそらく、パターンを置き換える正規表現[#][text]
は[#].text
? (実際には、これのエンコードされたバージョンがより関連性があります)