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>
}
Isn't pretty though
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.
Read this post for evaluate errors
How to add validation errors in the validation collection asp.net mvc?
In your view
Html.ValidationMessage("Email")