2012-01-30 27 views
14

Estoy tratando de convertir una forma sincrónica a partir asíncrono por medio del método de ayuda en Ajax.BeginForm MVC 4.ASP.NET MVC 4 AJAX Enviar formulario no funciona

En mi opinión que tengo:

@{ 
     ViewBag.Title = "Users > Edit"; 
     var options = new AjaxOptions() 
          { 
           Url = Url.Action("Edit", "User"), 
           LoadingElementId = "saving", 
           LoadingElementDuration = 2000, 
           Confirm = "Are you sure you want to save this User?" 
          }; 
    } 

    <div id="saving" style="display:none; color:Red; font-weight: bold"> 
     <p>Saving...</p> 
    </div> 

    @using (Ajax.BeginForm(options)) 
    { 
     @Html.ValidationSummary(true) 
     <fieldset> 
      .... FIELDS ... 
      <p> 
       <input type="submit" value="Save" /> 
      </p> 
     </fieldset> 
    } 

Cuando se hace clic en el botón Enviar, se está ejecutando una devolución de datos completa. Mi método de acción se ve así:

[HttpPost] 
public ActionResult Edit(User user) 
{ 
    if (ModelState.IsValid) 
    { 
     _repository.Save(user); 
     TempData["message"] = String.Format("{0} has been saved.", user.Username); 
    } 

    return View(user); 
} 

¿Hay algo que me falta? ¿La versión actual de MVC 4 tiene algunos problemas?

En mi Web.Config tengo ClientValidationEnabled y UnobtrusiveJavaScriptEnabled establecido en verdadero.

también tengo éstos especifican en mi _Layout.cshtml:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
+2

nota importante; jquery-1.9.0.min.js no es compatible con Ajax.FormBegin y Ajax.ActionLink :( –

Respuesta

26

¿Hay algo que me falta?

Quizás se echa en falta el guión ajax discreta:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
+0

+1 lo tienes: D –

+0

¡Sí, lo has visto! Tenía validate.unobtrusive.js, etc. Doh! Gracias: D – adamwtiko

+0

¡me has salvado el día! –

0

si se me entienda correcta, que están tratando de enviar los datos al controlador, después de éxito es necesario ir a la página de inicio ?? si no, puedes aclarar por lo que intentará ayudarle a

if (ModelState.IsValid) 
    { 
     _repository.Save(user); 
     TempData["message"] = String.Format("{0} has been saved.", user.Username); 
     return RedirectToAction("yourActionToRedirect"); // after succesfull it will go to the index view 
    } 
+0

En este ejemplo, me gustaría volver a la vista actual con los mismos datos de usuario, por ejemplo, devolver Ver (usuario); – adamwtiko

+0

y luego qué es el problema? ¿intentó depurarlo? ¿está accionando la acción en el controlador de usuario? –

+0

que no se está comportando de manera asincrónica. La página se está publicando y Request.IsAjaxRequest() devuelve falso en la acción de edición – adamwtiko

0

que tenían el mismo tipo de problema ... He actualizado todos los archivos js con la consola paquete Nuget.

sólo mi 2 centavos, sino también en el momento de la escritura, el archivo jquery.unobtrusive.ajax contiene llamadas a la función jQuery obsoleta '.live' (=> se elimina de jQuery versión 1.9+) jquery live

creo que hay como 4 ocurrencias que usted tendrá que cambiar con .en, ahora funciona bien ;-)

Cuestiones relacionadas