使用数据注释了解客户端和服务器端验证

时间:2010-09-18 10:16:13

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

我正在使用MVC 2.我有一个关于客户端和服务器端验证的问题。假设我有一个类,它有3个属性:

[Required(ErrorMessage = "Required")]
public object Property1 { get; set; }

[Required(ErrorMessage = "Required")]
public object Property2 { get; set; }

[Required(ErrorMessage = "Required")]
public object Property3 { get; set; }

在我看来,我只有Property1和Property 2并使它们成为文本框。我没有将Property3添加到视图中(但它被标记为如上所示)。如果我没有在文本框中键入任何内容,则客户端验证将失败。如果我在文本框中插入文本,即使Property3没有设置值,客户端也会通过吗?它会在服务器端失败吗?

单击提交按钮后,我遇到的问题是在服务器端。这是我的创建操作的代码:

public ActionResult CreateApplication(Application application)
{
   try
   {
      application.ApplicationStateID = 1;
      application.SubmitterEmployeeNumber = "123456";

      if (ModelState.IsValid)
      {
         // Code here
      }
   }
   catch
   {
   }
}

ApplicationStateID和SubmitterEmployeeNumber没有在客户端设置(它们都标记为必需),所以我在这里设置它。在我设置它们之后,为什么验证仍然在服务器端失败?

1 个答案:

答案 0 :(得分:1)

客户端验证将通过,因为没有相应的输入元素需要验证,服务器端验证将失败,因为您强制要求字段并且此字段值不会发布到服务器。您可以阅读this blog post以了解模型验证的工作原理以及输入验证与模型验证之间的差异。