我是MVC的初学者。如果iam使用下面的代码,那么Model.IsValid就不会验证对象,在本例中,对象就是Customer。
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");
}
如果Iam在参数中传递Customer对象,那么Model.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能帮我了解原因吗?
发布于 2015-12-07 02:55:49
它不能工作,因为MVC从未绑定到模型本身。您手动地覆盖它,因此MVC不知道模型是否有效。它不知道custObj
是模型。
ModelState.IsValid
是在调用操作方法之前设置的,因此在第二个示例中,当允许MVC绑定到模型本身时,它可以工作。首先,它不起作用,因为您创建了模型并对其进行了手动绑定。
更新
但是,您也可以通过在控制器上调用ValidateModel
或TryValidateModel
来手动运行模型验证。
文档:
发布于 2015-12-07 03:10:14
正如在其他答案中提到的,在调用操作'Submit‘之前,已经验证了您的模型。因此,当您从操作内部更改模型时,必须手动验证模型。您可以使用下面的代码。
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
https://stackoverflow.com/questions/34131808
复制