5

多くの状況で、値がポストバックされた結果としてサーバー上にモデルが作成されるという問題が発生しました。モデルの処理時に、モデル値の一部が変更され、ページに再表示されます。MVC フレームワークがモデル値の代わりに POSTed 値を使用する原因となる動作をオーバーライドする簡単な方法はありますか?

例:

モデル

public class MyModel {
    public string Value1 { get; set; }
}

コントローラ

public MyController : Controller {
    public ActionResult MyAction() {
        var model = new MyModel();
        model.Value1 = "OldValue";
        return View(model);
    }
    [HttpPost]
    public ActionResult MyAction(MyModel model) {
        model.Value1 = "NewValue";
        return View(model);
    }
}

意見

@using(Html.BeginForm("MyAction", "My", FormMethod.Post) {
    @Html.TextBoxFor(m => m.Value1)
    <input type="submit"/>
}

このページが最初に読み込まれると、テキストボックスには「OldValue」が含まれます。送信をクリックした後、サーバーに POST されたものであるため、テキストボックスにはまだ「OldValue」が含まれていますが、モデルからの値 (NewValue) を使用して (POST 後に) 2 番目のページを作成したいと考えています。

このように動作するように MVC に指示する簡単な方法はありますか? この状況で、自分の望む結果を得るために何をすればよいのかよくわかりません。

注 - これはすべて疑似コードであるため、エラーが発生する可能性がありますが、概念はそこにあるはずです。

4

2 に答える 2

8

投稿のリダイレクト (投稿 - リダイレクト - パターンの取得)。

[HttpPost]
public ActionResult MyAction(MyModel model) {
    model.Value1 = "NewValue";
    return RedirectToAction("MyAction");
}

編集

モデルの状態をクリアして、編集済みのモデルを戻します

    [HttpPost]
    public ActionResult MyAction(MyModel model)
    {
        var newModel = new MyModel();
        newModel = model;
        ModelState.Clear();
        newModel.Value1 = "NewValue";
        return View(newModel);
    }
于 2012-08-31T19:45:58.707 に答える
0

組み込みのヘルパーでそれを行う方法はありません。手動で行う必要があります

ヘルパーを使用して名前を取得する:

<input type="text" name="@Html.NameFor(m => m.MyField)" value="@Model.MyField"/>
于 2013-07-18T09:47:44.627 に答える