Asp.net mvc 3 ASP.net MVC 3基于模型逻辑自定义Html.ValidationMessageFor
我已经阅读了与此类似的几个问题,涉及到如何定制Asp.net mvc 3 ASP.net MVC 3基于模型逻辑自定义Html.ValidationMessageFor,asp.net-mvc-3,Asp.net Mvc 3,我已经阅读了与此类似的几个问题,涉及到如何定制@Html.ValidationMessageFor,但没有一个涉及到我要做的事情 我正在处理的当前表单正在数据库中编辑用户。在此表单中,我需要检查输入的电子邮件是否已用于其他用户。我有逻辑,但我没有的是,如果他们使用已经在使用的电子邮件,页面上会显示自定义验证消息 控制器代码: [HttpPost] public ActionResult EditUser(int id, EditUserModel model) {
@Html.ValidationMessageFor
,但没有一个涉及到我要做的事情
我正在处理的当前表单正在数据库中编辑用户。在此表单中,我需要检查输入的电子邮件是否已用于其他用户。我有逻辑,但我没有的是,如果他们使用已经在使用的电子邮件,页面上会显示自定义验证消息
控制器代码:
[HttpPost]
public ActionResult EditUser(int id, EditUserModel model)
{
if (ModelState.IsValid)
{
tbl_Users editedUser = tblUsers.EditUser(id, model, HttpContext.User.Identity.Name);
tblHSDA.EditHSDAS(id, editedUser, model.hsdas, HttpContext.User.Identity.Name);
return Redirect("~/UserManage/ListActiveUsers");
}
if (tblUsers.ValidateEmailInUse(model.Email))
{
// change validation message and return View(model);
}
tbl_Users tbl_users = db.tbl_Users.SingleOrDefault(item => item.User_id == id);
ViewBag.hsdas = tblHSDA.GetHSDANameAlpha();
ViewBag.Username = tbl_users.Username;
return View(model);
}
这是在控制器级别完成的吗?根据您的逻辑,如果用户正确填写表单并提供重复的电子邮件,电子邮件检查部分将永远不会执行 您可以做的是更改
操作结果
如
[HttpPost]
public ActionResult EditUser(int id, EditUserModel model)
{
if (ModelState.IsValid)
{
if(!CheckEmail(model.Email)){
tbl_Users editedUser = tblUsers.EditUser(id, model, HttpContext.User.Identity.Name);
tblHSDA.EditHSDAS(id, editedUser, model.hsdas, HttpContext.User.Identity.Name);
return Redirect("~/UserManage/ListActiveUsers");
}else{
ModelState.AddModelError("Email","Email provided is already in use...")
}
}
tbl_Users tbl_users = db.tbl_Users.SingleOrDefault(item => item.User_id == id);
ViewBag.hsdas = tblHSDA.GetHSDANameAlpha();
ViewBag.Username = tbl_users.Username;
return View(model);
}
private bool CheckEmail(string email){
//email check logic
// return true or false
}
还可以看看非常好。谢谢你的逻辑布局,这解决了我的问题。