web-dev-qa-db-fra.com

Comment puis-je rendre le code HTML dans un message de validation dans ASP.NET MVC?

Je développe actuellement une page d'inscription. Lorsque l'utilisateur existe déjà, je souhaite fournir un identifiant et réinitialiser les liens de mot de passe pour l'utilisateur dans le message d'erreur du champ de courrier électronique Dans le contrôleur j'ai:

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

Mais lorsque j'essaie de sortir ce message en vue, je ne reçois pas ce que j'attendais. Je reçois du balisage HTML comme du texte brut. J'ai déjà essayé :

@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>
}
23
Dmytro
@Html.Raw(HttpUtility.HtmlDecode(Html.ValidationMessageFor(m => m.Email).ToHtmlString()))

N'est pas jolie cependant

50
Brett

J'ai trouvé cet article en le découvrant moi-même en utilisant ASP.NET Core.

Ce que j'ai fini par faire a été d'ajouter ma partie de mon message de validation dans modelstate.AddError () et d'ajouter séparément à ViewData le bit contenant le code HTML que je voulais rendre, comme suit:

ViewData ["myKey"] = "Mon HTML";

C'est assez moche et il y a probablement de meilleures façons de le faire, mais pour mes besoins très limités, cela convient parfaitement.

0
Steviebob