如何在C#中执行内部ModelState.IsValid?

时间:2013-04-24 05:56:02

标签: c# asp.net-mvc-3

 [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方法时,它如何检查我的模型状态是有效还是无效。

1 个答案:

答案 0 :(得分:5)

当默认模型绑定器尝试实例化作为参数传递给控制器​​操作的模型(在执行此操作之前),如果存在某些验证错误,它将把它们添加到ModelState中。因此,一旦执行流程进入您的控制器操作,就会出现添加验证错误。 IsValid属性只检查Errors集合中是否有元素。

例如,假设您的ALLOCATION_M有一个用[Required]属性修饰的属性:

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

当您提交表单以便在请求中没有名为SomeProperty的参数时调用此控制器操作,或者如果它为空,则默认模型绑定器将添加与此属性关联的验证错误。