2012-06-06 16 views
7

È possibile inserire un collegamento HTML nel messaggio di riepilogo di convalida? Per esempio io voglio mettere un collegamento a un'altra pagina nel caso in cui non v'è errore di convalida:Collegamento nel messaggio riassuntivo di convalida

@Html.ValidationSummary(False, "read <a href=""anotherpage.html"">more</a>") 

o

@Html.ValidationSummary(False, "read " & 
    Html.ActionLink("more", "helpforerror").ToHtmlString) 

Ma nel browser il tag viene sfuggito in modo da non formare un collegamento.

risposta

3

fine ho scelto un altro modo per farlo: creare un div contenente il link etc . al di fuori della sintesi di convalida, e aggiungere il div solo se ModelState non è valido:

@If Not ViewData.ModelState.IsValid Then 
    @<div>read <a href="anotherpage.html">more</a></div> 
End If 

Questo si ispira an answer to similar question.

2

No, il comportamento predefinito non lo consente, ma è possibile crearne uno proprio. Questo è quello che vi serve: Html raw in validationsummary

0

È possibile verificare se modulo è valido per jQuery e aggiornamento div con link di testo:

<div id="divToUpdate"> 

</div> 

$('form').submit(function(){ 
    if(!this.valid()) 
     $('#divToUpdate').html("read <a href='anotherpage.html'>more</a>"); 
}); 
6

So che hai accettato una risposta, ma penso che la mia soluzione sia più semplice e richiederà meno riscrittura se si desidera aggiungere collegamenti a riepiloghi di convalida esistenti.

È necessario inserire un {0} tipo format item nel messaggio di convalida come di seguito, che verrà sostituito dal collegamento.

ModelState.AddModelError("", "Some error message with a link here {0}."); 

allora secondo lei chiamare il riepilogo di convalida in questo modo:

@string.Format(Html.ValidationSummary().ToString(), Html.ActionLink("Click Here", "Action_To_Link_To")).ToHtmlString() 

In questo caso ho usato un metodo di estensione ho aggiunto all'oggetto stringa di .ToHtmlString() che fondamentalmente solo converte la stringa in un HtmlString impedendo che il markup sia sfuggito. sembra che questo:

public static HtmlString ToHtmlString(this String str) 
{ 
    return new HtmlString(str); 
} 
+0

Davvero una bella soluzione, Ben! Ho finito per testare se 'Html.ValidationSummary() == null' prima e usando' Html.Raw() 'sull'output, ma funziona molto bene. Grazie! –

+0

Questo è intelligente :) –

2

Il testo di convalida è codificato prima della ValidationSumary o ValidationFor, ecc ...

Hai solo bisogno tu decodificare il codice HTML, quindi creare un MvcHtmlString ...

Esempio:

@HttpUtility.HtmlDecode(Html.ValidationSummary().ToString()).ToMvcHtmlString() 

si tratta di un'estensione che ho fatto per rendere MvcHtmlString:

namespace System 
{ 
    public static class StringExtension 
    { 
     public static System.Web.Mvc.MvcHtmlString ToMvcHtmlString(this string value) 
     { 
     return System.Web.Mvc.MvcHtmlString.Create(value); 
     } 
    } 
} 

oppure è possibile creare un HtmlHelper se si prevede di riutilizzare questo:

namespace System.Web.Mvc.Html 
{ 
    public static class FormHelper 
    { 
     public static MvcHtmlString ValidationSummaryEx(this HtmlHelper htmlHelper, bool excludePropertyErrors) 
     { 
      var original = htmlHelper.ValidationSummary(excludePropertyErrors); 
      var decoded = HttpUtility.HtmlDecode(original.ToString()); 
      return decoded.ToMvcHtmlString(); 
     } 
    } 
} 

spero che voi o spettatore futuro aiutare. Nota: funziona per tutte le convalide Riassunto e ValidazionePer ...

0

Se stai rimandando HTML nella ModelStateError, è possibile utilizzare questo uno di linea:

@Html.Raw(HttpUtility.HtmlDecode(Html.ValidationSummary().ToHtmlString())) 

E 'molto simile a quello che @Benoit avevano suggerito, solo senza bisogno l'estensione.

Problemi correlati