2

これは、コントローラーで検証を行う方法について私が見た例の1つです。

[HttpPost]
public ViewResult Create(MyModel response)
{
    if (ModelState.IsValid)
    {
        return View("Thanks");
    }
    else
    {
        return View();
    }
}

検証エラーがある場合は、return View()メソッドがパラメーターなしで呼び出されます。明らかに、ビューには@ Html.ValidationSummary()があり、モデルには必要なすべてのプロパティ属性があります。

フォームに入力されたデータは保持され、検証サマリーを使用してビューがレンダリングされたときに再度表示されました。

私の質問:データはどのように保存されますか?のようにビューに渡されなかったので

View(response);を返します。

どうもありがとう。

よろしくお願いいたします。Vlad

4

1 に答える 1

4

これは、ビューに戻されるモデルの状態に値がバインドされているためです。これは、モデル値を変更してビューを再度返すことができない理由に関する同じ問題/質問に沿っています。つまり、ビューモデルに次のプロパティがあると仮定しましょう

public string Name {get;set;}

以下のコントローラーを使用すると、ModelState をクリアするか、モデル状態の値を更新しない限り、ViewModel プロパティを変更できません。それを試してみてください!

[HttpPost]
public ViewResult Create(MyModel response)
{
    response.Name = response.Name + "Some Random String"
    return View();
}

name プロパティは変更されません。基本的に、ModelBinding が発生すると、フォーム (ViewModel) からの値がモデルの状態にバインドされるため、モデルをビューに戻す必要はありません。

補足として、私は常に への呼び出しでモデルを返します。return View();より正確で読みやすいようです。

于 2012-11-04T17:23:14.040 に答える