1

私は次のようなモデルを持っています:

class Model {
    public IList<Item> Items { get; set; }
}

class Item { public int Id { get; set; } }

モデルをパラメーターとして受け取るアクション メソッドにリクエストを送信しています。リクエストには、次のキーと値のペアが含まれています: " Items=" (i. e. Items=null。デフォルトのモデル バインダーは、アイテムを 1nullアイテムのリストに設定します。ここで、リスト プロパティ自体をnull(または少なくとも空に) します。

これを達成する方法はありますか?

明らかに、ある種のカスタム モデル バインディングを行うこともできますが、デフォルトのモデル バインダーを使用して機能するソリューションを好むでしょう (おそらく、要求のフォーマットを変更します)。

4

2 に答える 2

0

必要な動作を持つクラスにプロパティを追加できます。

public property MySanitizedItemsList
{
    get
    {
        if (Items.Length == 1 && Items[0] == null)
            return null
        else
            return Items;
    }
}
于 2013-01-07T20:04:48.363 に答える
0

jQueryを使用すると仮定すると、フォームをオブジェクトにシリアル化できるように拡張します

$.fn.serializeObject = function()
{
var o = {};
var a = this.serializeArray();
$.each(a, function() {
    if (o[this.name] !== undefined) {
        if (!o[this.name].push) {
            o[this.name] = [o[this.name]];
        }
        o[this.name].push(this.value || '');
    } else {
        o[this.name] = this.value || '';
    }
});
return o;
};

次に、フォームを変数に入れるだけです。

var data = $('form').serializeObject();

プロパティを削除するかどうかをテストして確認する

if(true){
    delete data.Items;
}

次に、ajax を使用してデータを送信することで通常どおり続行します。

于 2013-01-07T20:24:00.210 に答える