26

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>
}
2
  • Try @(new HtmlString(mystring)) Commented Feb 21, 2013 at 10:23
  • @jwillmer, tried... Se my edits... the same result... Commented Feb 21, 2013 at 15:34

3 Answers 3

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

Isn't pretty though

Sign up to request clarification or add additional context in comments.

1 Comment

That being said, in most cases it's probably better style to let your validation error message be your validation error message and to display the additional options to the user separately.
1

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.

Comments

-3

Read this post for evaluate errors

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

In your view

Html.ValidationMessage("Email")

1 Comment

This doesn't address the question.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.