手动调用ModelStatevalidation

我正在使用ASP.NET MVC 3代码,我已经添加了validation数据注释到我的模型。 以下是一个示例模型:

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; } } 

在我的网站上,我有一个多步骤的过程来创build一个新产品 – 步骤1你input产品的详细信息,步骤2其他信息等。每一步之间我将每个对象(即一个产品对象)存储在会话中,所以用户可以返回到该过程的这个阶段并修改他们input的数据。

在每个屏幕上,我有客户端validation工作与新的jQueryvalidation罚款。

最后一个阶段是在数据库中创build产品之后的确认屏幕。 但是因为用户可以在不同阶段之间跳转,所以我需要validation对象(产品和其他一些对象)来检查他们是否正确地完成了数据。

有什么办法编程方式调用具有数据注释的对象的ModelStatevalidation? 我不想通过对象上的每个属性,并进行手动validation。

如果能够更容易地使用ASP.NET MVC 3的模型validationfunction,那么我可以build议如何改进这个过程。

您可以在Controller操作中调用ValidateModel方法( 文档在这里 )。

您可以在控制器作用域中使用ValidateModelTryValidateModel

在validation模型时,如果至less有一个表单input绑定到模型属性,则所有属性的validation器都将运行。 ValidateModel类似于TryValidateModel方法,只是如果模型validation失败,TryValidateModel方法不会抛出InvalidOperationExceptionexception。

ValidateModel – 如果模型无效,则抛出exception。

TryValidateModel – 返回指示模型是否有效的布尔值。

如果逐个validation模型列表,则需要调用ModelState.Clear()来重置每个迭代的ModelState.Clear()

链接到MSDN

我发现这个工作,并按照预期完成…显示一个GET操作方法上新鲜检索的对象的ValidationSummary …任何POST之前

 Me.TryValidateModel(MyCompany.OrderModel)