4

私は ASP.NET MVC 3 を使用しており、単純な json 配列を .xml にモデル バインドしようとしていList<JsonPositions>ます。JsonPositions配列内の json オブジェクトと同じプロパティを持つカスタム オブジェクトです。

これが私のアレイがクライアント上でどのように見えるかです:

var widgetPositions = [
    { col: 5, row: 1, id: 2 },
    { col: 4, row: 5: id: 40 }
];

$.ajax({
    url: 'the url',
    data: { positions: widgetPositions },
    success: function () {
        alert('Save successful.');
    },
    error: function () {
        alert('An error occurred while trying to update the widget positions.');
    }
});

Chrome でリクエストを調べると、このコードは正しく機能しているように見えます。

コントローラーには、次のアクション メソッドがあります。

public void UpdatePositions(List<JsonPosition> positions)
{
    // debugging here
}

リストを調べるとwidgetPositions、json 配列と同じように 2 つの項目がありますが、オブジェクトのプロパティはクライアント上のオブジェクトの値と一致しません。オブジェクトJsonPositionは次のようになります。

public class JsonPosition
{
    public int id { get; set; }
    public int col { get; set; }
    public int row { get; set; }
}

あなたが提供できる助けをありがとう:)

4

2 に答える 2

3

content-type を追加する必要があるかもしれないと思います:

$.ajax({
    url: 'the url',
    data: JSON.stringify({ positions: widgetPositions }),
    contentType: 'application/json',
    success: function () {
        alert('Save successful.');
    },
    error: function () {
        alert('An error occurred while trying to update the widget positions.');
    }
});

また、リクエスト タイプを指定していないため、デフォルトで GET を実行しますが、POST を実行するという意味ですか? それはそれを作るでしょう

$.ajax({
    url: 'the url',
    type: 'POST',
    data: JSON.stringify({ positions: widgetPositions }),
    contentType: 'application/json',
    success: function () {
        alert('Save successful.');
    },
    error: function () {
        alert('An error occurred while trying to update the widget positions.');
    }
});
于 2012-08-15T16:23:51.917 に答える
2

それらを JSON オブジェクトとして送信できます。

var widgetPositions = [
    { col: 5, row: 1, id: 2 },
    { col: 4, row: 5: id: 40 }
];

$.ajax({
    url: 'the url',
    data: JSON.stringify({ positions: widgetPositions }),
    contentType: 'application/json',
    success: function () {
        alert('Save successful.');
    },
    error: function () {
        alert('An error occurred while trying to update the widget positions.');
    }
});

コードに含まれていないことに注意してください。これにより、コードが機能します。

  • contentType: 'application/json',- 適切なリクエスト コンテンツ タイプ ヘッダーを設定する
  • data: JSON.stringify({ positions: widgetPositions })- JSON リクエストを送信する

これで、必要なものはすべてここで手に入ります:

public void UpdatePositions(List<JsonPosition> positions)
{
    // debugging here
}

注意: このJSON.stringifyメソッドは、最新のすべてのブラウザーでネイティブに定義されています (最新のブラウザーとはかけ離れていても、IE8 であっても)。ただし、一部の先史時代のブラウザーをサポートする必要がある場合は、ブラウザーがこのメソッドをネイティブにサポートしているかどうかを確認し、サポートしていない場合は実装を提供するjson2.jsスクリプトをページに含めることができます。

于 2012-08-15T16:51:14.477 に答える