How can I render html in validation message in ASP

2019-01-22 02:52发布

I am currently developing a registration page. When user already exists I want to provide login and reset password links for user in error message for email field. In controller I have:

[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);
  }
}

But when I try to output this message in view I do not get what I expect. I get html markup like plain text. I've already tried:

@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>
}

3条回答
Melony?
2楼-- · 2019-01-22 03:16
@Html.Raw(HttpUtility.HtmlDecode(Html.ValidationMessageFor(m => m.Email).ToHtmlString()))

Isn't pretty though

查看更多
老娘就宠你
3楼-- · 2019-01-22 03:25

Found this post while figuring this out myself using ASP.NET Core.

What I ended up doing was adding my part of my validation message in modelstate.AddError(), and separately adding to ViewData the bit that had the Html I wanted to render, like so:

ViewData["myKey"]= "My html";

It feels pretty ugly and there's probably better ways of doing it, but for my very limited needs, this fit the bill nicely.

查看更多
一夜七次
4楼-- · 2019-01-22 03:38

Read this post for evaluate errors

How to add validation errors in the validation collection asp.net mvc?

In your view

Html.ValidationMessage("Email")

查看更多
登录 后发表回答