ASP.net MVC 3基于模型逻辑自定义Html.ValidationMessageFor

时间:2013-03-04 20:09:32

标签: asp.net-mvc-3

我一直在阅读与此类似的几个问题,处理自定义@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);
    }

这是在控制器级别完成的吗?

1 个答案:

答案 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