2012-04-25 11 views
5

Acabo de empezar a usar el patrón MVC con ASP.NET con Razor, ¡todo es genial! Las anotaciones de modelos para la validación se veían estupendas al principio, pero ahora se está volviendo bastante molesto ya que no parece haber una manera directa de validar una casilla de verificación y parece complicado integrar su propia validación de JQuery en un formulario junto con el modelo validación. Parece que al agregar las anotaciones en el modelo, asp.net está haciendo el trabajo por usted, lo cual es genial, pero cuando se trata de personalizar un sitio, no quiero que se haga nada por adelantado. Entonces, ¿es mejor usar su propia validación usando JQuery o apegarse a usar las anotaciones en el Modelo?ASP.NET MVC: ¿es mejor usar la validación de JQuery personalizada en lugar de usar anotaciones de modelo?

Gracias

+0

Solo puedo hablar sobre mí ... Prefiero las anotaciones del modelo. –

+0

¿No cree que tiene más flexibilidad con JQuery en lugar de jugar con el modelo con código C#? – Funky

+1

Necesitará la validación del lado del cliente, así como la validación del lado del servidor. –

Respuesta

8

del lado del cliente de sólo la validación es un gran error desde una perspectiva de seguridad. Definitivamente validar en el lado del servidor; y si le duele hacer ambas cosas, abandone la validación del lado del cliente.

La validación del modelo ha llegado bastante bien con MVC3, y es probablemente más flexible de lo que le está dando crédito.

Por ejemplo, se puede implementar el IValidatableObject de su modelo, lo que requiere este método para definirse:

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 

en la que puede colocar todo tipo de reglas de validación al contenido de su corazón, incluidas las normas sobre la base de combinaciones de más de un valor de entrada (por ejemplo, password y password_repeat deben ser iguales)

1

También prefiero las anotaciones del modelo. Cualquier validación de jQuery que pueda tener también le gustaría poner como anotación de modelo para asegurarse de que alguien no haya pasado por su validación de jQuery al deshabilitar javascript o hackear ...

La forma más fácil que he encontrado para agregar validación casilla de verificación, así como cualquier otra medida de validación sería utilizar el CustomValidationAttribute como se describe aquí:

http://weblogs.asp.net/peterblum/archive/2009/12/07/the-customvalidationattribute.aspx

Ejemplo:

[CustomValidation(typeof(Category), "FinalCheck")] 
public partial class Category 
{ 
    [CustomValidation(typeof(Category), "TestCategoryName")] 
    public string CategoryName { get; set; } 

    public bool Active { get; set; } 

    public bool ShowOnHomepage { get; set; } 

    public static ValidationResult FinalCheck(Category pCategory, ValidationContext pValidationContext) 
    { 
     if (!pCategory.Active && pCategory.ShowOnHomepage) 
     return new ValidationResult("The category must be active in order to show it on the homepage.", new List<string> { "Active", "ShowOnHomepage" }); 
     return ValidationResult.Success; 
    } 

    public static ValidationResult TestCategoryName(string pNewName, ValidationContext pValidationContext) 
    { 
     if (Regex.IsMatch(pNewName, @"^\d")) 
     return new ValidationResult("Cannot start with a digit", new List<string> { "CategoryName" }); 
     return ValidationResult.Success; 
    } 
} 
2

lo más importan Es que tienes validación del lado del servidor. No tiene que usar anotaciones de datos: puede intentar usar otro enfoque para la validación, como implementar IValidatableObject o integrar otro marco de validación.

Desde mi experiencia, las anotaciones de datos (junto con la biblioteca de validación discreta) proporcionan una forma fácil y ampliable de vincular las reglas del lado del servidor con una implementación del lado del cliente, en lugar de definir las mismas reglas en diferentes lugares.

Si desea un control explícito sobre la validación del lado del cliente (pero igual que cómo funcionan las anotaciones de datos en el servidor), puede desactivar el adaptador javascript (esto agrega reglas de validación del lado del cliente basadas en atributos de datos representados en su entrada campos) e implementar reglas del lado del cliente manualmente.

Pero es difícil entender por qué querría hacer eso, cuando todo lo que hace el adaptador es vincular una regla del lado del servidor (podría ser personalizada, podría no) a su equivalente del lado del cliente.

Cuestiones relacionadas