我一直在阅读与此类似的几个问题,处理自定义@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);
}
这是在控制器级别完成的吗?
答案 0 :(得分:1)
根据您的逻辑,如果用户正确填写表单并提供重复的电子邮件,则电子邮件检查部分将永远不会执行
你可以做的是改变ActionResult
喜欢
[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
}
还可以查看http://msdn.microsoft.com/en-us/library/gg508808%28v=vs.98%29.aspx