3

ASP.NETMVCでこの問題に取り組む最善の方法は何でしょうか。以下は、私がやりたいことの簡単な例です。

テキストボックスと送信ボタンのあるWebページがあります。送信ボタンを押したときに、同じWebページにコンテンツを表示したいのですが。もう一度押すと、最初の提出からすでに表示されていたものと、提出されたばかりの新しいデータが表示されます。

このデータをモデルに保存しようとしましたが、フォームが投稿されるたびにモデルが完全に消去されます。どうすればこれを実行して、最後の投稿の前の投稿(およびその前の投稿)のデータを保持できますか?

4

2 に答える 2

3

リクエスト間でデータを保持したい場合は、開始点として「TempData」を使用します。TempDataプロパティ値はセッション状態で保存され、読み取られるまで、またはセッションが期限切れになるまで存在します。

ViewModelの例:

    public class SomeClass
    {
        public string Something { get; set; }
        public List<string> RetainedValues { get; set; } 
    }

コントローラーの例:

    [HttpGet]
    public ActionResult Index()
    {
        return View("Index");
    }

    [HttpPost]
    public ActionResult Index(SomeClass postedValues)
    {
        // retrieve retained values
        var retained = (List<string>) TempData["RetainedValues"] ?? new List<string>();
        retained.Add(postedValues.Something);

        // save for next post
        TempData["RetainedValues"] = retained;

        // setup viewmodel
        var model = new SomeClass
        {
            RetainedValues = retained
        };

        return View("Index", model);
    }

ビューの例(強く入力された):

    <div>
        @foreach(var item in Model.RetainedValues)
        {
            <div>@item</div>
        }
    </div>
    @using(Html.BeginForm())
    {
        @Html.EditorFor(m=>m.Something)
        <input type="submit"/>
    }
于 2012-05-19T00:45:41.160 に答える
1

モデルプロパティに非表示のフィールドを配置するだけで、プレビュー値がロードされ、次の投稿に戻されます。

元。:@Html.HiddenFor(model => model.YourProperty)

たとえば、2つのプロパティを持つことができることを知っています。1つはnewValueという名前で、もう1つはallValuesという名前です。

非表示フィールドで使用するallValuesと、新しいフィールドを挿入するために使用するnewValue。したがって、投稿時に、newValueをallValuesに追加するだけです。

そのようなもの:model.allValues + = newValue;

-更新

または、@Jesseが述べたようにsessionまたはtempdataを使用できます

この場合、複雑さが低く、とにかくユーザーに表示されるため、データを安全にする必要がないため、非表示フィールドを使用することをお勧めします。

于 2012-05-19T00:05:56.470 に答える