3

いくつかのフィールドがあるモデルのビューがあります。GETでビューをレンダリングすると、この時点で空のコードを格納する非表示フィールドがあります。次に、POSTを実行し、アクションでモデルを介してこのコードフィールドに値を追加し、次のようにモデルをビューに送信します。

return View (model);

ビューがレンダリングされるとき、非表示フィールドにはコード値はありませんが、ビューには最初のステップで入力された他のすべての値が含まれています。したがって、2番目のボタンに投稿すると、アクションに渡されたモデルには、最初の投稿応答で渡された非表示のコード値が含まれていません。

最初の投稿でモデルを更新して新しい値でビューに送り返した場合、そのコードを利用可能なビューの非表示の入力に保存して、アクションに再度投稿できるようにすべきではありませんか?

また、最初のポストバックでモデルフィールドを変更し、更新されたモデルをビューに送信すると、最初のPOSTアクションの値のみが保持されることにも気づきました。ここにキャッシュの問題がありますか?、この動作をどのように管理しますか?ありがとう

4

2 に答える 2

5

POST アクションで値を変更する前に、ModelState から削除する必要があります。

[HttpPost]
public ActionResult Foo(MyViewModel model)
{
    // update the value of the model that was POSTed to some new value
    model.SomeProperty = "some new value";

    // remove POSTed value from the modelstate if you intend to modify it here
    ModelState.Remove("SomeProperty");

    return View(model);
}

これを行う必要があるのはHtml.HtextBoxFor、 、 Html.HiddenFor、 ... などの Html ヘルパーがバインド時に最初に modelstate の値を使用し、次にモデルの値を使用するためです。ModelState から値を削除しない場合、HiddenForヘルパーはアクションで変更した値ではなく、空の文字列である元の POST 値を使用します。

于 2012-06-24T20:58:01.523 に答える