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 回答