mvc razor中的错误消息位置

时间:2014-07-01 15:45:05

标签: asp.net-mvc asp.net-mvc-4 razor

我试图为登录和注册表单添加自定义错误消息。

到目前为止,我有表单来检查是否已经注册了一封电子邮件,如果已经注册,它将会返回

Response.Write("There's already someone with that email")

但问题是这条消息只会出现在网站的顶部。

有没有办法可以在其他地方显示这些错误消息?

我知道在模型中我可以放

[Required(ErrorMessage = "Something here")]

然后只是把视图放在某个地方

@Html.ValidationMessageFor(a =>a.Email)

并在那里显示错误。

我现在的代码是:

[HttpPost]
    public ActionResult Register(Registration signingUp)
    {


        var db = new ShareRideDBEntities();

        if (ModelState.IsValid)
        {
            //find if email is already signed up
            var FindEmail = db.tblProfiles.FirstOrDefault(e => e.PROF_Email == signingUp.Email);
            //if email is not found up do this
            if (FindEmail == null)
            {
                var Data = db.tblProfiles.Create();
                Data.PROF_Password = signingUp.Password;
                Data.PROF_Email = signingUp.Email;
                db.tblProfiles.Add(Data);

                int Saved = db.SaveChanges();

                if (Saved != 0)
                {
                    Response.Write("Registration Successful.");
                }

                else
                {
                    Response.Write("There was an error.");
                }

            }
            else
            {
                Response.Write("There's already an user with that email.");
                return View();
            }
        }
        else
        {
            Response.Write("Fill all the fields to continue.");
        }

return View();

现在,如果我使用现有的电子邮件执行此操作,它将返回"已经是使用该电子邮件的用户。"但它将显示在网站的顶部。

如何将此错误消息显示在其他位置?

我听到了@ Html.Raw()的一些内容,但我对如何使用它感到困惑。

1 个答案:

答案 0 :(得分:2)

使用this.ModelState.AddModelError方法,您可以添加所需的任何自定义错误消息。如果将属性名称指定为键 - 它将由相应的ValidationMessageFor显示。因此在控制器中而不是直接写入响应:

ModelState.AddModelError("Email", "There's already an user with that email.");
return View();

看看你已经拥有的这一行:

@Html.ValidationMessageFor(a =>a.Email)

会在您放置它的页面的任何部分显示此消息(可能是在电子邮件的字段附近)。