2012-06-06 16 views
7

¿Es posible poner un enlace HTML en el mensaje de resumen de validación? Por ejemplo, yo quiero poner un enlace a otra página en caso de que haya error de validación:Enlace en el mensaje de resumen de validación

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

o

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

Pero en el navegador de la etiqueta se escapó por lo que no se forma un enlace.

Respuesta

3

Finalmente elegí otra forma de hacerlo: crear un div que contiene el enlace, etc. . exterior de resumen de validación, y añadir el div sólo si ModelState no es válido:

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

Esto es inspirada por an answer to similar question.

0

Puede comprobar si la forma es válida por jQuery y actualización div con enlace de texto:

<div id="divToUpdate"> 

</div> 

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

Sé que ha aceptado una respuesta, pero creo que mi solución es más simple y requerirá menos reescritura si desea agregar enlaces a resúmenes de validación existentes.

Debe poner {0} tipo format item en su mensaje de validación, como a continuación, que será reemplazado por su enlace.

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

continuación, en su opinión, llame a su resumen de la validación de este modo:

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

En este caso he utilizado un método de extensión añadí al objeto de cadena .ToHtmlString() que básicamente convierte la cadena a un HtmlString evitando que se escape cualquiera de las marcas. se parece a esto:

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

¡Solución realmente agradable, Ben! Terminé probando si 'Html.ValidationSummary() == null' primero y usando' Html.Raw() 'en la salida, pero funciona muy bien. ¡Gracias! –

+0

Eso es inteligente :) –

2

El texto de validación se codifica antes de la ValidationSumary o ValidationFor, etc ...

Sólo se necesita tu decodificar el código HTML, a continuación, crear una MvcHtmlString ...

Ejemplo:

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

esto es una extensión que he hecho para hacer MvcHtmlString:

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

o puede crear un HtmlHelper si va a volver a utilizar este:

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

espero que usted o espectador futuro ayudar. Nota: funciona para todas las validaciones Resumen y ValidaciónPara ...

0

Si va a enviar de vuelta HTML en el ModelStateError, se puede utilizar este chiste:

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

Es muy similar a lo que @Benoit habían sugerido, simplemente sin necesidad de la extensión.

Cuestiones relacionadas