1

リストを含むオブジェクトを含むビューモデルがあり、WebGridを使用してこのリストを出力しています。

このページは現在、このリストを編集/追加する複数のアクションにポストバックできます。すべてのポストバックにわたってこのデータを保持して、過去のアクションがリストで実行した変更にすべてのアクションが対応できるようにしたいと思います。とにかく、Webグリッドをコントローラーのモデルにバインドさせることはできますか?または、セッション/データベースなどの別の方法を使用してリストが必要ですか?

これが私の意味を明確にするのに役立つ私のコードです。

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

public class EggBasketViewModel {
    public Basket EggBasket { get; set; } // Contains list of eggs & other basket info
    public Egg EggToAdd { get; set; }
}

そして私はそれを次のように出力しています:

@model Basket.Models.EggBasketViewModel
@{
    var grid = new WebGrid(Model.Eggs); // Eggs is my list of eggs
}
@using (Html.BeginForm()) {
        @Html.Partial("_CreateOrEditEggBasket")
        @Html.Partial("_CreateOrEditEgg")
        @grid.GetHtml()
        <p>
            <button name="button" value="submitEgg">Add Egg</button>
            <button name="button" value="submitBasket">Submit Basket</button>
        </p>

}

私のコントローラーは次のようになっています。

[HttpPost]
public ActionResult Create(EggBasketViewModel Model, string button)
{
    if (ModelState.IsValid) {
        switch (button) {
            case "submitEgg":
                return this.submitEgg(Model);
            case "submitBasket":
                return this.submitBasket(Model);
            default:
                break;
        }
    } else {
        return View();
    }
}

public ActionResult SubmitBasket(EggBasketViewModel Model) {
    eggBasketRepository.InsertOrUpdate(Model.EggBasket);
    eggBasketRepository.Save();
    return RedirectToAction("Index");
}

public ActionResult SubmitEgg(EggBasketViewModel Model) {
    Model.EggBasket.Eggs.Add(Model.EggToAdd);
    return View(Model);
}

モデルバインダーがPOSTでビューモデルにデータをバインドできるようにWebGridがデータを出力し、WebGridによって出力されたhtmlを使用して新しいエッグを永続化できると考えて、この方法で作成しました。WebGridがモデルバインダーと互換性のある方法でリストを出力できる方法はありますか?それとも、別の方法を使用したほうがいいですか?

ありがとう。

4

0 に答える 0