问题描述
|
我使用的是ASP.NET MVC 3代码优先的代码,并且已将验证数据注释添加到我的模型中。这是一个示例模型:
public class Product
{
public int ProductId { get; set; }
[required(ErrorMessage = \"Please enter a name\")]
public string Name { get; set; }
[required(ErrorMessage = \"Please enter a description\")]
[DataType(DataType.MultilineText)]
public string Description { get; set; }
[required(ErrorMessage = \"Please provide a logo\")]
public string logo { get; set; }
}
在我的网站上,我有一个创建新产品的多步骤过程-第1步输入产品详细信息,第2步其他信息等。在每个步骤之间,我将Session中的每个对象(即Product对象)存储起来,因此用户可以返回到该过程的那个阶段并修改他们输入的数据。
在每个屏幕上,我都有使用新的jQuery验证功能的客户端验证。
最后一个阶段是确认屏幕,之后将在数据库中创建产品。但是,因为用户可以在阶段之间跳转,所以我需要验证对象(产品和其他一些对象)以检查它们是否正确完成了数据。
有什么方法可以以编程方式在具有数据注释的对象上调用ModelState验证吗?我不想遍历对象上的每个属性并进行手动验证。
如果可以简化使用ASP.NET MVC 3的模型验证功能的过程,我欢迎提出建议。
解决方法
您可以在
Controller
动作(此处的文档)中调用ValidateModel
方法。
, 您可以在控制器范围内使用ValidateModel
或TryValidateModel
。
验证模型时,所有属性的所有验证器都是
如果至少一个表单输入绑定到模型属性,则运行。的
ValidateModel类似于方法TryValidateModel,除了
TryValidateModel方法不会引发InvalidOperationException
如果模型验证失败,则异常。
ValidateModel-如果模型无效,则引发异常。
TryValidateModel-返回布尔值,指示模型是否有效。
如果您逐一验证模型列表,则需要通过调用ModelState.Clear()
为每次迭代重置ModelState。
链接到MSDN
, 我发现它可以正常工作,并且完全按预期进行。.在任何POST之前,在GET操作方法上显示了新检索对象的ValidationSummary ...
Me.TryValidateModel(MyCompany.OrderModel)