Asp.net mvc 如何最好地使用asp.net MVC 2';s数据注释验证?
典型情况下,发布到检查ModelState.IsValid的操作,如果是,则保存到DB。验证规则设置为模型中的数据注释 这是我的问题。我有一个不能超过400个字符的数据字段。数据注释强制执行这一点,并在客户端执行jQuery验证 用户输入395个字符,包括一些换行符。我的应用程序,将这些换行符转换为Asp.net mvc 如何最好地使用asp.net MVC 2';s数据注释验证?,asp.net-mvc,validation,data-annotations,Asp.net Mvc,Validation,Data Annotations,典型情况下,发布到检查ModelState.IsValid的操作,如果是,则保存到DB。验证规则设置为模型中的数据注释 这是我的问题。我有一个不能超过400个字符的数据字段。数据注释强制执行这一点,并在客户端执行jQuery验证 用户输入395个字符,包括一些换行符。我的应用程序,将这些换行符转换为标记。但那是在调用UpdateModel()之后。由于标记比换行符长,它通过了UpdateModel的验证,但在实际尝试保存到DB时失败 基本上是这样的代码(来自NerdDinner): [HttpP
标记。但那是在调用UpdateModel()
之后。由于
标记比换行符长,它通过了UpdateModel的验证,但在实际尝试保存到DB时失败
基本上是这样的代码(来自NerdDinner):
[HttpPost,授权]
公共操作结果编辑(int id,FormCollection集合){
晚餐=晚餐地点。获取晚餐(id);
试一试{
UpdateModel(晚餐,“晚餐”);
晚餐.Description=晚餐.Description.Replace(“\n”和“
”);
//…现在它超过了长度限制
dinnerRepository.Save();
return RedirectToAction(“Details”,new{id=dinner.DinnerID});
}
抓住{
返回视图(晚餐);
}
}
抛出异常时,不会填充数据注释中的ModelState规则冲突,因此不会向用户显示任何消息
处理这个问题的好方法是什么?您应该能够像
if (TryUpdateModel(dinner, "Dinner")) {
dinner.Description = dinner.Description.Replace("\n", "<br />");
//... now it's over length limit
if (TryValidateModel(dinner)) {
dinnerRepository.Save();
return RedirectToAction("Details", new { id=dinner.DinnerID });
}
}
return View(dinner);
if(TryUpdateModel(晚餐,“晚餐”)){
晚餐.Description=晚餐.Description.Replace(“\n”和“
”);
//…现在它超过了长度限制
if(TryValidateModel(晚餐)){
dinnerRepository.Save();
return RedirectToAction(“Details”,new{id=dinner.DinnerID});
}
}
返回视图(晚餐);
这将消除try{}块,并允许您验证您的模型。哦,我不知道TryValidateModel,可以试一试。谢谢TryValidateModel很神奇!喜欢TryUpdateModel和TryValidateModel的流程。非常感谢!谢谢,看起来不错。我一定会调查的。
if (TryUpdateModel(dinner, "Dinner")) {
dinner.Description = dinner.Description.Replace("\n", "<br />");
//... now it's over length limit
if (TryValidateModel(dinner)) {
dinnerRepository.Save();
return RedirectToAction("Details", new { id=dinner.DinnerID });
}
}
return View(dinner);