0
我正在使用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和财产2,使他们文本框。我没有将Property3添加到视图中(但它被标记为如上所需)。如果我没有在文本框中输入任何内容,那么客户端验证将失败。如果我在文本框中插入文本,即使Property3没有设置值,客户端是否会传递?它会在服务器端失败吗?
我点击提交按钮后,服务器端出现问题。这里是我的代码为我创建行动:
public ActionResult CreateApplication(Application application)
{
try
{
application.ApplicationStateID = 1;
application.SubmitterEmployeeNumber = "123456";
if (ModelState.IsValid)
{
// Code here
}
}
catch
{
}
}
ApplicationStateID和SubmitterEmployeeNumber没有在客户端设置(它们都标记为必需的),所以我将它设置在这里。在我设置它们之后,为什么验证在服务器端仍会失败?
谢谢。看到我更新的问题,也许你可以更多地了解一些情况。我现在就去阅读那篇文章。 – 2010-09-18 10:29:38
原因是因为验证是在模型绑定期间执行的。在此模型绑定发生后,您正在设置所需的属性**。一种可能的解决方法是使用'TryUpdateModel'方法而不是将其作为动作参数传递。 – 2010-09-18 10:35:22
谢谢你Darin。只是最后一个问题,我是否正确地做了这件事,把所有事情都放在一个尝试和抓住?通常在Web表单中,我将检查应用程序是否为空,如if(application == null)。 – 2010-09-18 10:38:05