2
 [HttpPost]
        public ActionResult Create(ALLOCATION_M allocationM)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    allocationM.ALLO_ID = GetId();
                    _unitOfWork.AllocationMRepository.Insert(allocationM);
                    _unitOfWork.Save();
                    return RedirectToAction("Index");
                }
            }
            catch (DataException)
            {
                ModelState.AddModelError("", EditorLocalization.AllocationMasterController_Create_Unable_to_save_changes__Try_again__and_if_the_problem_persists__see_your_system_administrator_);
            }

            return View(allocationM);
        }

C# ランタイムは内部的にどのようにチェックしModelState.IsValidますか? post メソッドがビューから呼び出されたときに、モデルの状態が有効か無効かをチェックする方法を意味します。

4

1 に答える 1

5

デフォルトのモデル バインダーがコントローラー アクションに引数として渡されるモデルを (このアクションを実行する前に) リクエスト値からインスタンス化しようとすると、検証エラーが発生した場合に ModelState に追加されます。したがって、実行フローがコントローラ アクションに入ると、すでに検証エラーが追加されています。IsValid プロパティは、Errors コレクションに要素があるかどうかを単純にチェックします。

たとえば、次の属性ALLOCATION_Mで装飾されたプロパティがあるとします。[Required]

[Required]
public string SomeProperty { get; set; }

SomeProperty要求で呼び出されるパラメーターがない場合、または空の場合に、このコントローラー アクションを呼び出すためにフォームを送信すると、既定のモデル バインダーは、このプロパティに関連付けられた検証エラーを追加します。

于 2013-04-24T05:59:32.330 に答える