3

私は ajax jQuery メソッドを使用するつもりはありません。div に .load() メソッドを使用したいと思います。私のjavascriptメソッドは次のようになります。

function PartialViewLoadArray(aName, aValue, aGuid, aName2, aValue2, aGuid2) {

    modelArray = [];

    modelArray.push({ Name: aName, Value: aValue, Guid: aGuid });
    modelArray.push({ Name: aName2, Value: aValue2, Guid: aGuid2 });

    $('#examplediv').load(
        '/Example/PartialByModelArray/',
        { ModelArray: modelArray },
        function () {
            alert('the load has completed!');
        }
    );
}

コントローラーのアクションは次のとおりです。

public PartialViewResult PartialByModelArray(ExamplePartialArrayModel aModel)
{
    return PartialView("_ExamplePartialByArray", aModel);
}

私のアレイモデル:

public class ExamplePartialArrayModel
{
    public ExamplePartialModel[] ModelArray { get; set; }
}

上記のモデルに含まれるモデル:

public class ExamplePartialModel
{
    private string _Name;
    private int? _Value;
    private string _Guid;

    public string Name
    {
        get { return this._Name; }
        set { this._Name = value; }
    }

    public int? Value
    {
        get { return this._Value; }
        set { this._Value = value; }
    }

    public string Guid
    {
        get { return this._Guid; }
        set { this._Guid = value; }
    }
}

コンテキストや文字列ライターなどを使用して部分ビューを手動でレンダリングすると、この div にコンテンツをロードできることはわかっていますが、この load() ステートメントを機能させることができるはずです。MVC がこのデータを取得しないのはなぜですか? 非常に奇妙なのは、アクションの最初の行にブレークポイントを設定すると、配列内に 2 つの項目が表示されることですが、それらのプロパティはすべて null です。配列内のアイテムの量を決定するが、それらの値をバインドしないにはどうすればよいでしょうか? 何が起こっている?私は当惑しています。

4

1 に答える 1

2

問題は、データがフォーム データとして投稿され、jquery が既定のモデル バインダーが理解できない形式でこれを行うことです。私のテストでは、フィドラーを使用して、データが次の形式で送信されたことを確認しました。

ModelArray[0][Name]  : name1
ModelArray[0][Value] : value1
ModelArray[0][Guid]  : guid1
ModelArray[1][Name]  : name2
ModelArray[1][Value] : value2
ModelArray[1][Guid]  : guid2

これを修正する最も簡単な方法は、データを json 形式で投稿することです。

function PartialViewLoadArray(aName, aValue, aGuid, aName2, aValue2, aGuid2) {
    var modelArray = [];

    modelArray.push({ Name: aName, Value: aValue, Guid: aGuid });
    modelArray.push({ Name: aName2, Value: aValue2, Guid: aGuid2 });

    $.ajax({
        type: 'POST',
        url: '/home/PartialByModelArray/',
        contentType: 'application/json',
        data: { ModelArray: modelArray },
        success: function (response) {
            $('#examplediv').replaceWith(response);
        }
    });
}

このコードはjson2ライブラリを使用して json データをエンコードしており、コントローラー アクションは [HttpPost] 属性でマークする必要があることに注意してください。

ajax メソッドを使用したくない理由はわかりませんが、フォーム データをより mvc に適した形式にエンコードする方法や、カスタム モデル バインダーを作成する方法を見つけることもできますが、それはすべてより多くの努力。この投稿では、この問題についてもう少し説明しており、いくつかのアイデアが得られるかもしれません。

于 2012-11-13T00:54:23.003 に答える