我正在使用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步其他信息等 . 在每个步骤之间我将每个对象(即Product对象)存储在Session中,因此用户可以返回到该过程的那个阶段并修改他们输入的数据 .
在每个屏幕上,我都有客户端验证,使用新的jQuery验证 .
最后阶段是确认屏幕,之后产品将在数据库中创建 . 但是,因为用户可以在各个阶段之间跳转,所以我需要验证对象(产品和其他一些对象)以检查它们是否已正确完成数据 .
有没有办法以编程方式在具有数据注释的对象上调用ModelState验证?我不想浏览对象上的每个属性并进行手动验证 .
如果能够更轻松地使用ASP.NET MVC 3的模型验证功能,我愿意接受如何改进此过程的建议 .
3 回答
您可以在
Controller
动作(documentation here)内调用ValidateModel
方法 .您可以在控制器范围中使用
ValidateModel
或TryValidateModel
.ValidateModel - 如果模型无效,则抛出异常 .
TryValidateModel - 返回bool值,指示模型是否有效 .
如果逐个验证模型列表,则需要通过调用
ModelState.Clear()
为每次迭代重置ModelState .Link to MSDN
我发现这个工作并且正如预期的那样做 . 在GET操作方法上显示新检索对象的ValidationSummary ...在任何POST之前