3 votes

Utilisation de html dans la propriété ErrorMessage des annotations de données

Quelqu'un sait-il s'il est possible de faire ce qui suit :

public class User
{
    public Guid UserID { get; set; }

    [Required(ErrorMessage="A school selection is required.")]
    [Range(1, int.MaxValue, ErrorMessage="School not found.  Please contact support at <a href='mailto:support@mysite.com'>support@mysite.com</a>")]
    public int SchoolID { get; set; }

    // ... other properties
}

Et ne pas avoir @Html.ValidationMessageFor(model => model.SchoolID) coder le HTML ? Peut-être dois-je créer une extension d'aide personnalisée pour cela ? Existe-t-il un moyen plus simple ? Tout conseil serait apprécié. Si une extension d'aide est la solution, comment puis-je accéder aux règles de validation dans la méthode d'extension d'aide pour m'assurer que le code HTML n'est pas encodé ?

Merci.

0voto

Tommy Points 17332

En fonction de la fréquence d'utilisation, vous pouvez utiliser la fonction HttpUtility.HtmlDecode sur le message de validation.

@{HttpUtility.HtmlDecode(Html.ValidationMessageFor(x=>x.SchoolId).ToString)}

La méthode la plus réutilisable, mais qui demande plus de temps au départ, serait de créer votre propre aide html (peut-être appelée HtmlValidationMessageFor()) qui renvoie une chaîne encodée non-html.

Ceci étant dit, le type de retour de la fonction ValidationMessageFor est un MvcHtmlString qui stipule qu'il est

Représente une chaîne codée en HTML qui ne doit pas être codée à nouveau.

Mais je n'ai pas trouvé de raison solide de ne pas l'encoder à nouveau, si ce n'est qu'il peut s'agir d'une chaîne encodée en double.

0voto

ryanulit Points 2836

J'ai fait quelques recherches supplémentaires et je suis tombé sur l'article de l'OS ci-dessous qui explique comment faire ce que je demande. J'ai ajouté cette réponse ici au cas où quelqu'un rencontrerait ce problème à l'avenir. Je vais marquer ceci comme la réponse également puisqu'elle est la plus proche de la meilleure réponse que je cherchais, mais je vais laisser les modérateurs décider si cela doit être fermé comme un duplicata.

Rendre les balises HTML à l'intérieur de HTML.ValidationMessageFor dans MVC3

0voto

guitarlass Points 752

J'avais juste besoin d'une solution de contournement pour un message d'erreur. Il s'agit donc d'un simple détour par jquery ;

 <script>
    $(document).ready(function() {
       $('.validation-summary-errors ul li').each(function(){
            if($(this).html() == "School not found"){
                $(this).html("School not found.  Please contact support at <a href='mailto:support@mysite.com'>support@mysite.com</a>");
            }
       });
    });

Santé !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X