MVC2:使用DataAnnotations验证DataType

时间:2010-11-10 15:33:17

标签: asp.net-mvc validation asp.net-mvc-2 data-annotations

我正在使用Entity Framework + SQL Server DB,并使用带有DataAnnotations的部分类来验证数据。对于像Required和Range这样的东西,这很好用,但是我无法让DataType验证器工作。

以下是(自定义)注释的示例:

[DataTypeWholeNumberAttribute(ErrorMessage = "Zip must be a whole number")]
public object Zip{ get; set; }

......和控制器代码......

[HttpPost]   
public ActionResult Edit(NamedInsuredViewModel viewModel)   
{   
    try  
    { //breakpoint here (opening squiggly bracket) shows .Zip is already null   
        if (ModelState.IsValid)   
        ...save, etc...
    }
}

我知道发生了什么:数据库中Zip的DataType是int,所以默认验证是捕获它并在我的验证器之前应用通用错误消息“值[x]对[FieldName]无效”得到它(为了证明这一点,我还在字符串字段中添加了相同的验证器,并且它工作得很好)。我不知道的是,我怎么能解决这个问题(不,我不能改变数据库以使用字符串)?

这篇文章(http://forums.asp.net/p/1608322/4162819.aspx#4162819)提供了一些建议,但到目前为止没有任何帮助。

提前致谢。

PS - 如果没有创建自定义属性,是否真的无法验证原始DataType?

2 个答案:

答案 0 :(得分:0)

我认为错误是将名为“viewModel”的内容传递给编辑操作。 ViewModel用于将数据传递给视图以呈现它。 提交表单时,数据必须映射到实体,而不是映射到viewModel。

[HttpPost]   
public ActionResult Edit(YourEntity entity)   
{   
    try  
    { //breakpoint here (opening squiggly bracket) shows .Zip is already null   
        if (ModelState.IsValid)   
        ...save, etc...
    }
}

答案 1 :(得分:0)