2011-03-04 17 views
21

Lo siento si esto ya se ha preguntado, pero he estado buscando en algún momento, pero todo lo que he encontrado son mensajes bastante antiguos (mvc1, mvc2). Tengo un formulario que me gustaría enviar a través de Ajax.asp.net mvc 3 - ajax formulario de envío y validación

This parece que funcionaría, pero no cubre la validación del lado del servidor.

1) No estoy seguro de si debo usar el AjaxHelper.BeginForm o usar las llamadas a jquery sin procesar ($.ajax)? ¿Cuál es el enfoque recomendado aquí?

2) ¿Cómo manejo la validación del lado del cliente y del servidor? Estoy esperando que el framework mvc proporcione un mecanismo integrado para lidiar con esto? Hay algunas validaciones que solo estoy haciendo en el servidor. ¿Seguiría trabajando con un ValidationSummary aquí?

Estoy usando asp.net mvc3/razor con la validación javascript no intrusiva.

¡Gracias!

Editar: (según lo solicitado por Bobby B a continuación). Esto se añadió meses después de pedir a la pregunta de un usuario quería saber cómo utilizar AjaxHelper

Este es el código Javascript utilicé:

<script type="text/javascript"> 

function ajaxValidate() { 
    return $('form').validate().form(); 
} 

function getGbPostSuccess(ajaxContext){ 
    // .... it is not necessary to do anything here. 
} 
function showFaliure(ajaxContext){ 
    // handle failure 
} 

fragmento HTML:

@using (Ajax.BeginForm("Index", "Home", new AjaxOptions 
         { 
          UpdateTargetId = "form1", 
          InsertionMode = InsertionMode.Replace, 
          OnBegin = "ajaxValidate", 
          OnSuccess = "getGbPostSuccess", 
          OnFailure = "showFaliure" 
         })) 
{ 

Respuesta

8

He estado usando malsup's jQuery form plugin por un tiempo para este fin. Sinceramente, no estoy familiarizado con AjaxHelper, pero parece que hará lo que estás buscando. En lo que respecta a la validación del lado del cliente y del servidor, todo debería suceder automáticamente, siempre y cuando utilice el enlace del modelo y los atributos del espacio de nombres System.DataAnnotaciones.

public class MyModel 
{ 
    [Required(ErrorMessage = "Please enter your name")] 
    public String Name { get; set; } 

    [Required(ErrorMessage = "Please enter your email")] 
    public String Email { get; set; } 

    [Required(ErrorMessage = "Please enter a rating")] 
    [Range(1, 5, ErrorMessage = "The rating must be between 1 and 5")] 
    public Int32 Rating { get; set; } 
} 

[HttpPost] 
public ActionResult Index(MyModel myModel) 
{ 
    if(ModelState.IsValid) 
    { 
     // good to go, put it in the DB or whatever you need to do 
    } 
    else 
    { 
     return View(model); // return the user back to the page, ModelState errors can be viewed using Html.ValidationSummary() or individual Html.ValidationMessageFor() calls 
    } 
} 

Si usted está haciendo su propia validación del lado del servidor personalizado, puede crear su propio atributo de validación personalizado mediante la creación de un atributo que implementa ValidationAttribute, o simplemente añadir los errores de validación llamando ModelState.Errors.Add () (o algo por el estilo, no tengo una referencia a mano)

Por el lado del cliente, MVC generará la validación del cliente para usted en función de los atributos de DataAnnotaciones en su modelo.

+0

¡Gracias! Tengo que trabajar ahora. Terminé usando AjaxHelper. – santiagoIT

+0

¿Alguna posibilidad de que pueda explicar cómo utilizó AjaxHelper? Me enfrento al mismo problema y estoy tratando de decidir cuál es el mejor enfoque para tomar. ¡Gracias! –

+0

Agregaré el código de ejemplo como una edición a la pregunta. De esa forma puedo formatearlo mejor ;-) – santiagoIT

1

MVC.NET 3 ya tiene esto fuera de la caja. Solo asegúrese de que ClientValidationEnabled esté habilitado en web.config. Compruebe this

+0

Revisé el enlace, pero se explica cómo habilitar la validación del lado del cliente. Tengo habilitada la validación del lado del cliente, lamentablemente esta no es mi pregunta. – santiagoIT

Cuestiones relacionadas