1

post メソッドから新しいモデルをビューに戻そうとする単純な post アクションがあります。何らかの理由で、新しいモデルを返すと、投稿したモデルが常に表示されるのはなぜですか? 投稿アクションでモデルの値を変更してユーザーに戻す必要がありますが、何らかの理由でそれを行うことができませんか?

public ActionResult Build()
{
    return View(new Person());
}

[HttpPost]
public ActionResult Build(Person model)
{
    return View(new Person() { FirstName = "THX", LastName = "1138" });
}

これはビュー コードです。

@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>Person</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.FirstName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.FirstName)
            @Html.ValidationMessageFor(model => model.FirstName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.LastName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.LastName)
            @Html.ValidationMessageFor(model => model.LastName)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

フォームを開いて、名に「John」、姓に「Smith」と入力してフォームを投稿すると、投稿アクションから「THX 1138」ではなく「John」、「Smith」が返されます。この動作をオーバーライドしますか? また、なぜそれを行うのか知りたいですか?

4

1 に答える 1

5

this.ViewData = null;これを行うには、投稿アクションに次のように追加して、投稿された値を忘れるように ASP.NET MVC に指示します。

[HttpPost]
public ActionResult Build(Person model)
{
    this.ViewData = null;

    return View(new Person() { FirstName = "THX", LastName = "1138" });
}
于 2013-06-20T12:50:00.820 に答える