如何在ASP.NET MVC中的验证消息中呈现html?

Dmy*_*tro 24 c# asp.net-mvc razor

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

[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);
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在视图中输出此消息时,我没有得到我期望的结果.我得到像纯文本一样的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>
}
Run Code Online (Sandbox Code Playgroud)

Bre*_*ett 51

@Html.Raw(HttpUtility.HtmlDecode(Html.ValidationMessageFor(m => m.Email).ToHtmlString()))
Run Code Online (Sandbox Code Playgroud)

虽然不漂亮

  • 话虽这么说,在大多数情况下,将验证错误消息作为验证错误消息并单独向用户显示其他选项可能是更好的方式. (2认同)