Reputation: 17156
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>
}
Upvotes: 26
Views: 28791
Reputation:
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.
Upvotes: 1
Reputation: 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")
Upvotes: -3
Reputation: 1140
@Html.Raw(HttpUtility.HtmlDecode(Html.ValidationMessageFor(m => m.Email).ToHtmlString()))
Isn't pretty though
Upvotes: 56