手动调用ModelState验证

问题描述

| 我使用的是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)