aspnet mvc modelState如何知道如何检查属性的有效性?

时间:2011-05-07 14:51:35

标签: asp.net-mvc-3

我有班级员工

public class Employee
{
  public string LastName { get; set; }
  public decimal Salary { get; set; }
}

在EmployeesController中,方法

[HttpPostAttribute]
public ActionResult Create(Employee employee)
{

}

如果用户在Employee表单的Salary字段中输入“1,2,3”,则ModelState将变为无效。

  1. “1,2,3”是有效的C#十进制数,但更重要的是
  2. 为什么/如何/在什么基础上Asp.Net MVC检查输入字符串的有效性?
  3. 我没有找到关于此的官方文档。任何人都可以对此有所了解吗?

1 个答案:

答案 0 :(得分:0)

enter link description here这就是DecimalModelBinder的工作方式(参见第二个回复,基本上是Decimal Model Binder对于1,2和/或3 ......返回false)。它只将1,2和3视为整数。

尝试传入1.00并且它会接受它。

这就是ModelBindershere的神奇之处。 Here's a nice overview.

以下是how to extend it的示例。

Another overview with some tips for taking advantage of the model binding.

您还可以下载源代码,以了解它正在做什么。 codeplex site有一些很好的信息也可以帮到你。

编辑 - 在评论中回答您的问题......

您可以使用Data Annotations更改错误消息。还可以查看this。如果您不喜欢默认/内置工作方式,也可以创建自己的数据注释。您还可以localize your validation messages

这是另一个nice overview,它介绍了一些可用于验证的技术。您可以直接向模型添加验证以及使用注释。您可能正在使用IDataErrorInfo接口,IValidatableObject接口和/或Remote Validation进行验证。