1

コントローラのメソッド呼び出し中に何が起こりますか?コントローラ内のすべてのPUBLICメソッドのMVCはModelStateを評価/設定しますか?メソッドパラメータのすべてのクラスをテストしますか?

public ActionResult Create(Entity myEntity, AnotherEntity, myEntity2)
{
    if (ModelState.IsValid)
    {

intとActionResultのリターンがあった場合:

public int Create(Entity myEntity, AnotherEntity, myEntity2)
{
    if (ModelState.IsValid)
    {

評価されたクラスを持つModelStateはまだありますか?

4

1 に答える 1

3

実際にはコントローラーではありません。モデルバインダーです。モデルバインダーの責任は、要求値を指定して対応するモデルをインスタンス化することです。したがって、最初のステップはモデルバインディングであり、2番目のステップは検証です。最初のステップは、モデルバインダーによって実行されます。この手順でエラーが発生した場合(たとえば、モデルの整数フィールドを、ユーザーが任意のテキストを入力した入力テキストにバインドしようとした場合)、モデルバインダーは自動的にモデルの状態にエラーを追加します。かどうかをテストできるコントローラーアクションを入力しますModelState.IsValid

モデルのバインドが成功すると、対応する検証フレームワークに渡されるモデルのインスタンスが作成されます。したがって、たとえば、データアノテーションを使用していて、モデルプロパティを検証属性で装飾している場合、それらは評価され、エラーが発生した場合は、ModelStateに自動的に追加されます。

intとActionResultのリターンがあった場合:

すべてのコントローラーアクションがActionResultを返す必要があるASP.NETMVCの標準規則に違反します。ただし、戻り型は、入力パラメーターのモデルバインディングおよび検証とは実際には何の関係もありません。戻り値のタイプは、ActionResultの可能な派生クラスのいずれか、またはカスタムクラスにすることができます。

したがって、たとえば、モデルのHTML表現をレンダリングする場合は、を返しますViewResult。モデルのJSON表現を返したい場合は、を返しますJsonResult。静的な文字列を返したい場合は、を返しますContentResult。ユーザーがファイルをダウンロードできるようにする場合は、を返しますFileResult。等々。

于 2012-09-26T14:54:25.750 に答える