手动调用ModelState验证

时间:2011-06-15 15:18:27

标签: c# .net asp.net-mvc asp.net-mvc-3 asp.net-mvc-validation

我正在使用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其他信息等。在每个步骤之间我将每个对象(即产品对象)存储在会话中,因此用户可以返回到该过程的那个阶段并修改他们输入的数据。

在每个屏幕上,我都有客户端验证,可以使用新的jQuery验证。

最后阶段是确认屏幕,之后将在数据库中创建产品。但是因为用户可以在各个阶段之间跳转,我需要验证对象(产品和其他一些对象)以检查它们是否已正确完成数据。

有没有办法以编程方式在具有数据注释的对象上调用ModelState验证?我不想浏览对象上的每个属性并进行手动验证。

如果能够更轻松地使用ASP.NET MVC 3的模型验证功能,我愿意接受如何改进此过程的建议。

4 个答案:

答案 0 :(得分:72)

您可以在ValidateModel操作(documentation here)内调用Controller方法。

答案 1 :(得分:43)

您可以在控制器范围内使用ValidateModelTryValidateModel

  

验证模型时,所有属性的所有验证器都是   如果至少有一个表单输入绑定到模型属性,则运行。该   ValidateModel就像TryValidateModel方法一样,除了   TryValidateModel方法不会抛出InvalidOperationException   如果模型验证失败,则出现异常。

ValidateModel - 如果模型无效,则抛出异常。

TryValidateModel - 返回bool值,指示模型是否有效。

如果您逐个验证模型列表,则需要通过调用ModelState.Clear()为每次迭代重置ModelState。

Link to MSDN

答案 2 :(得分:2)

我发现这个工作并且正如预期的那样做..在GET操作方法上显示新检索对象的ValidationSummary ...在任何POST之前

Me.TryValidateModel(MyCompany.OrderModel)

答案 3 :(得分:1)

public/