mvc:Model.IsValid,如果我正在使用Request.Form,则不起作用

本文关键字:Request Form 不起作用 Model IsValid 如果 mvc | 更新日期: 2023-09-27 18:25:54

我是MVC的初学者。如果 i正在使用以下代码,则 Model.IsValid 不会验证对象,在本例中是客户。

 public ActionResult Submit()
    {
        Customer custObj = new Customer();
        custObj.CustomerCode = Request.Form["CustomerCode"];
        custObj.CustomerName = Request.Form["CustomerName"];
        if (ModelState.IsValid)
            return View("Load", obj);
        else
            return View("EnterCustomer");
    }

如果我在参数中传递客户对象,则模型.IsValid工作正常。

public ActionResult Submit(Customer obj)
    {
        //Customer custObj = new Customer();
        //custObj.CustomerCode = Request.Form["CustomerCode"];
        //custObj.CustomerName = Request.Form["CustomerName"];
        if (ModelState.IsValid)
            return View("Load", obj);
        else
            return View("EnterCustomer");
    }

any1可以帮助我了解原因吗?

mvc:Model.IsValid,如果我正在使用Request.Form,则不起作用

它不起作用,因为 MVC 从未绑定到模型本身。您手动覆盖它,因此 MVC 不知道模型是否有效。它不知道custObj是模型。

ModelState.IsValid是在调用操作方法之前设置的,因此在第二个示例中,当您允许 MVC 绑定到模型本身时,它会起作用。首先,它不起作用,因为您创建了模型并对其执行手动绑定。

更新

但是,您也可以通过在控制器上调用ValidateModelTryValidateModel来手动运行模型验证。

文档:

  • ValidateModel: https://msdn.microsoft.com/en-us/library/system.web.mvc.controller.validatemodel(v=vs.100(.aspx
  • TryValidateModel: https://msdn.microsoft.com/en-us/library/system.web.mvc.controller.tryvalidatemodel(v=vs.100(.aspx

如其他答案中所述,在调用操作"提交"之前,您的模型已经过验证。因此,当您从操作内部更改模型时,您必须手动验证模型。您可以使用以下代码。

var context = new ValidationContext(custObj, serviceProvider: null, items: null); var validationResults = new List<ValidationResult>(); bool isValid = Validator.TryValidateObject(custObj, context, validationResults, true);

if (isValid) return View("Load", obj); else return View("EnterCustomer");

请使用下面的 URL 了解更多详细信息。http://odetocode.com/blogs/scott/archive/2011/06/29/manual-validation-with-data-annotations.aspx