1

MVC モデル バインディングについては、非常に多くの役立つ情報があります。私の問題は、主にデータルーターとして機能する必要があるため、MVC アプリケーションで厳密に型指定されたデータを作成しないようにしようとしていることに起因しています。

基本的に、ページに一連のフィールドがあり、クラス「入力」を使用して収集しjQuery('.input')、繰り返し処理して、javascript オブジェクトに詰め込むことができます。次に、これを ASP.NET MVC コントローラーに送信します。

var inputData = my_serialize( $('input');
$.ajax({
  type:'POST',
  url: '/acme/Ajax/CaptureInput',
  dataType: "json",
  data: { inputData: JSON.stringify(inputData) },
  success: Page_Response_RegisterAndDeposit,
  error: Page_AjaxError
});

C#側では、

public JsonResult CaptureInput(string inputDataAsJsonString)
{
  JavaScriptSerializer JSON = new JavaScriptSerializer();
  object inputData = JSON.DeserializeObject(inputDataAsJsonString);

これは無駄なレベルの間接的なように思えます。データを contentType:application/json として渡し、CaptureInput にobjectorIDictionaryまたはdynamic.

4

2 に答える 2

1

serializeArrayメソッドを使用できます。任意のタイプの入力要素を含むフォームがあり、次のコントローラー アクションを呼び出したいとします。

public ActionResult CaptureInput(Dictionary<string, string> values)
{
    ...
}

続行する方法は次のとおりです。

<script type="text/javascript">
    var values = $('form').serializeArray();
    var data = {};
    $.each(values, function (index, value) {
        data['[' + index + '].key'] = value.name;
        data['[' + index + '].value'] = value.value;
    });

    $.ajax({
        url: '@Url.Action("CaptureInput")',
        type: 'POST',
        contentType: 'application/json',
        data: JSON.stringify(data),
        success: function (result) {
            alert('success');
        }
    });
</script>
于 2012-05-29T06:20:06.157 に答える
0

正確にはあなたが求めているものではありませんが、辞書が埋め込まれた単純なラッパーオブジェクトにバインドできるようにすることで、この問題の解決により部分的な回避策が得られる可能性があります。ディクショナリへの直接バインディングも許可する場合があります。わかりません... $.ajax 呼び出しで json ContentType ヘッダーを明示的に設定する必要がある場合もあります

「ASP.NET MVC/WebAPI における IDictionary<> の JSON モデル バインディング」

于 2012-05-29T03:49:50.370 に答える