2

javascript から mvc コントローラーに 2 つのパラメーターを渡そうとしています。1 つ目はモデルで、2 つ目は文字列です。

html は次のとおりです。

<input type="button" onclick="save(Json.Encode(@Html.Raw(model)), @Html.Raw(object.Id))" />

これがJavaScriptです:

function save(model, id) {

      $.ajax({
          url: '@Url.Action("SaveModel", "Test")',
          type: "POST",
          datatype: "json",
          data: { model: model, id: id }
          }
      });

  }

そして、ここにコントローラーがあります:

[HttpPost]
    public ActionResult SaveModel(Model model, string id)
    {
        return null;
    }

モデル パラメータのみを渡すと、data: { model: model }機能ます。リクエストの投稿は次のようになります。

AProperty   value1
AnotherProperty value2
AnArray[0][Property...
AnArray[1][Property...
etc.

しかし、両方のパラメーターを渡そうとするdata: { model: model, id: id }と、リクエストの投稿は次のようになります

model[AProperty]    value1
model[AnotherProperty]  value2
model[AnArray][0][Property...
model[AnArray][1][Property...
etc.

リクエストがコントローラーに到達すると、モデル オブジェクトがインスタンス化されますが、すべての値が null になります。シリアライザーが失敗したと思います。

すべての助けに感謝します。

4

2 に答える 2

1

私の同僚はそれを解決しました。次のように、コンテンツ タイプを指定し、モデルで stringify を実行する必要があります。

$.ajax({
      url: '@Url.Action("SaveModel", "Test")',
      type: "POST",
      contentType: "application/json",
      data: JSON.stringify({ model: model, id: id })
      }
  });

多分これは将来誰かを助けるでしょう。

于 2012-09-10T13:52:29.013 に答える
0

このJSONライブラリを使用して、stringify()

$.ajax({
      url: '@Url.Action("SaveModel", "Test")',
      type: "POST",
      datatype: "json",
      data: JSON.stringify({ model: model, id: id })
    }
});
于 2012-09-07T16:02:13.790 に答える