我正在使用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?
答案 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)