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 从未绑定到模型本身。您手动覆盖它,因此 MVC 不知道模型是否有效。它不知道custObj
是模型。
ModelState.IsValid
是在调用操作方法之前设置的,因此在第二个示例中,当您允许 MVC 绑定到模型本身时,它会起作用。首先,它不起作用,因为您创建了模型并对其执行手动绑定。
更新
但是,您也可以通过在控制器上调用ValidateModel
或TryValidateModel
来手动运行模型验证。
文档:
- 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