25

我目前正在开发一个注册页面。当用户已经存在时,我想在电子邮件字段的错误消息中为用户提供登录和重置密码链接。在控制器中,我有:

[HttpPost]
public ActionResult Register(RegistrationModel registration)
{
  ...

  if(userExists)
  {
      const string errorMessage = "User already exist. You can <a href="/account/login">login</a> ...";
      ModelState.AddModelError("Email", errorMessage);
      return View("Register", registration);
  }
}

但是当我尝试在视图中输出此消息时,我没有得到我期望的结果。我得到像纯文本一样的 html 标记。我已经尝试过

@using(Html.BeginForm())
{
<div>@Html.TextBoxFor(m => m.Email)            
@{
   @Html.ValidationMessageFor(m => m.Email)

   ...

   @Html.Raw(Html.ValidationMessageFor(m => m.Email))

   ...

   string validationMessage = Html.ValidationMessageFor(m => m.Email).ToString();
   @Html.Raw(validationMessage)

   ...

   string validationMessage = Html.ValidationMessageFor(m => m.Email).ToHtmlString();
   @Html.Raw(validationMessage)

   ...

   string validationMessage = Html.ValidationMessageFor(m => m.Email).ToString();
   @(new HtmlString(validationMessage))

   ...

   string validationMessage = Html.ValidationMessageFor(m => m.Email).ToHtmlString();
   @(new HtmlString(validationMessage))

   ...

   string validationMessage = Html.ValidationMessageFor(m => m.Email).ToString();
   @(new MvcHtmlString(validationMessage))

   ...

   string validationMessage = Html.ValidationMessageFor(m => m.Email).ToHtmlString();
   @(new MvcHtmlString(validationMessage))

}
</div>
}
4

3 回答 3

55
@Html.Raw(HttpUtility.HtmlDecode(Html.ValidationMessageFor(m => m.Email).ToHtmlString()))

虽然不漂亮

于 2013-02-21T14:09:40.947 回答
1

在自己使用 ASP.NET Core 解决这个问题时发现了这篇文章。

我最终做的是在 modelstate.AddError() 中添加我的验证消息部分,并分别将具有我想要呈现的 Html 的位添加到 ViewData,如下所示:

ViewData["myKey"]= "我的 html";

感觉很丑,可能有更好的方法,但对于我非常有限的需求,这很符合要求。

于 2017-06-08T20:50:40.130 回答
-3

阅读这篇文章以评估错误

如何在验证集合 asp.net mvc 中添加验证错误?

在你看来

Html.ValidationMessage("电子邮件")

于 2013-10-14T13:06:17.667 回答