2011-10-24 33 views
23

Estoy usando vistas MVC3 Razor estándar con una validación JavaScript discreta, usando @Html.ValidationSummary para mostrarlas en la parte superior del formulario. Si las validaciones estándar (cosas como [Required]) pasan, entonces ejecuto una validación muy personalizada del lado del cliente que se activa cuando el usuario pulsa el botón Enviar. (La validación se ve en una serie de elementos de formulario para asegurarse de que se haya verificado el conjunto adecuado de ellos, etc., por lo que no es tan simple como crear un nuevo validador personalizado para un solo campo).Agregar mensaje de error a @ Html.ValidationSummary

Me gustaría que el posible error (s) que construyo allí se muestre en la lista ValidationSummary, pero no puedo encontrar la manera de que aparezca el mensaje de error.

+1

En el lado del cliente o del lado del servidor? –

Respuesta

37

En el lado del cliente:

function YourCustomValidator() { 
    // do your validation logic here via JavaScript 
    return true; // or false based on your validation logic 
} 
$(document).ready(function() { 
    // take your own form-selector like ("form", this) 
    $("form", this).first().submit(function() { 
     return (YourCustomValidator() && $(this).valid()); 
    }); 
}); 

O En el lado del servidor:

piensa que tiene un modelo como este:

public class Test { 
    [Required] 
    [StringLength(100)] 
    public string FullName { get; set; } 
} 

y cuando está validando it:

if(ModelState.IsValid) { // default validations run here 
    if(/* some custom validations run here, there is an error about "FullName" */){ 
     // you should set the "key" for Model-Error to "FullName" 
     ModelState.AddModelError("FullName","error-message goes here") 
    } 
    if(/* some custom validations run here, the error is global, not on "FullName" */){ 
     // you should set the "key" for Model-Error to an empty-string 
     ModelState.AddModelError("","error-message goes here") 
    } 
    // also you can test for model-errors again like this: 
    if(ModelState.IsValid) { // if you add any error above, this will be "false" 

    } 
} 
+3

Gracias - Estoy buscando simplemente lado del cliente en este caso. Mi pregunta es: si encuentro un error en "YourCustomValidator", ¿cómo puedo obtener mi mensaje de error específico para que aparezca? Ya tengo la validación del lado del servidor, que me permite establecer cualquier mensaje de error que desee a través de "AddModelError", pero quiero hacer el equivalente en Javascript. – Kras

+0

Puede crear una lógica personalizada para mostrar un mensaje de error a través de JS y/o puede crear una clase de atributo de validación personalizada a través de C#. ¿A cuál te refieres? –

+3

bien descrito:] +1 – Shahin

4

Puede hacerlo simplemente agregando el Error Message al ModelState debe mostrar el mensaje de error para usted, siempre que tenga ValidationSummary() llamado en su vista.

Para añadir el error a la ModelState acaba de hacer esto:

ModelState.AddModelError("ColumnNameOrErrorMessageKeyInState","error message goes here") 
Cuestiones relacionadas