我正在使用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没有在客户端设置(它们都标记为必需),所以我在这里设置它。在我设置它们之后,为什么验证仍然在服务器端失败?
答案 0 :(得分:1)
客户端验证将通过,因为没有相应的输入元素需要验证,服务器端验证将失败,因为您强制要求字段并且此字段值不会发布到服务器。您可以阅读this blog post以了解模型验证的工作原理以及输入验证与模型验证之间的差异。