2010-04-26 6 views
2

J'ai page d'enregistrement et si la validation échoue, il affiche les messages d'erreur en utilisant le contrôle HTML.ValidationSummary.Page ASP.NET MVC - liens hypertexte dans HTML.ValidationSummary

Maintenant, je dois afficher le lien hypertexte dans ce message d'erreur de validation. Mais il traite aussi href comme chaîne.

La validation du message que je suis en train d'afficher avec hyperlien est: **"User already exists in the system, please <a href='../Login.aspx'>login</a>"**

Appréciez vos réponses.

Voici mon code:

<% using (Html.BeginForm()) {%> 
    <%= Html.ValidationSummary(false) %> 
    <fieldset> 
    <div class="cssform">; 
     <p> 
      <%= Html.LabelFor(model => model.email)%><em>*</em> 
      <%= Html.TextBoxFor(model => model.email, new { @class = "required email" })%> 
      <%= Html.ValidationMessageFor(model => model.email)%> 
     </p> 
     <p> 
      <%= Html.Label("Confirm email")%><em>*</em> 
      <%= Html.TextBox("confirm_email")%> 
      <%= Html.ValidationMessage("confirm_email") %> 
     </p> 
     <p> 
      <%= Html.Label("Password")%><em>*</em> 
      <%= Html.Password("Password", null, new { @class = "required" })%> 
      <%= Html.ValidationMessage("Password")%><br /> 
      (Note: Password should be minimum 6 characters) 
     </p> 
     <p> 
      <%= Html.Label("Confirm Password")%><em>*</em> 
      <%= Html.Password("confirm_password")%> 
      <%= Html.ValidationMessage("confirm_password") %> 
     </p><hr /> 
    </div> 
    <p><input type="submit" value="Register" /></p> 
    </fieldset> 
<% } %> 

Répondre

3

La valeur par défaut retourne aide ValidationSummary une valeur codée HTML; Si vous souhaitez autoriser le HTML à l'intérieur de ValidationSummary, vous devrez créer votre propre version. Jetez un oeil sur le code source dans le MVC 2 RTM source code pour commencer. Le ValidationSummary HtmlHelper est défini dans la classe System.Web.Mvc.Html.ValidationExtensions (située dans mvc2-rtm-sources \ src \ SystemWebMvc \ Mvc \ Html).

Un regard sur le code source en ValidationExtensions.cs il semblerait que listItem.SetInnerText(errorText) est le coupable:

if (modelStates != null) { 
    foreach (ModelState modelState in modelStates) { 
     foreach (ModelError modelError in modelState.Errors) { 
      string errorText = GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext, modelError, null /* modelState */); 
      if (!String.IsNullOrEmpty(errorText)) { 
       TagBuilder listItem = new TagBuilder("li"); 
       listItem.SetInnerText(errorText); 
       htmlSummary.AppendLine(listItem.ToString(TagRenderMode.Normal)); 
      } 
     } 
    } 
} 

Modification du code à listItem.InnerHtml = errorText produira le comportement que vous désirez; Cependant, cela ne sera pas aussi simple car la méthode ValidationSummary appelle des méthodes internes System.Web.Mvc que vous devrez implémenter manuellement dans votre version personnalisée afin de reproduire le comportement original.

+0

Eh oui ......... Il est pas si simple .... Qu'est-ce que – Rita

+0

tu veux dire? –

+0

Comme vous l'avez mentionné ........ semble que ce ne sera pas aussi simple que cela. – Rita

2

La solution côté serveur est meilleur, mais du côté client nous pourrions lancer un truc rapide:

$(function(){ 
    $(".validation-summary-errors").find("li").each(function() { 
     var $this = $(this); 
     $this.html($this.text()); 
    }); 
}); 
Questions connexes