2012-01-30 2 views
14

Je suis en train de convertir une forme de synchrone asynchrone en utilisant la méthode d'assistance Ajax.BeginForm dans MVC 4.ASP.NET MVC 4 AJAX Soumettre le formulaire ne fonctionne pas

À mon avis, j'ai:

@{ 
     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> 
    } 

Lorsque vous cliquez sur le bouton Soumettre, une publication complète est en cours d'exécution. Ma méthode d'action ressemble à ceci:

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

Y at-il quelque chose qui me manque? La version actuelle de MVC 4 a-t-elle rencontré quelques problèmes?

Dans mon Web.Config, j'ai la propriété ClientValidationEnabled et UnobtrusiveJavaScriptEnabled définie sur true.

J'ai également précisé dans mon _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

Note importante; jquery-1.9.0.min.js ne supporte pas Ajax.FormBegin et Ajax.ActionLink :( –

Répondre

26

Y at-il quelque chose que je suis absent?

Peut-être vous manque le script ajax discret:

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

+ 1 vous l'avez: D –

+0

Oui, vous l'avez repéré! Avait validate.unobtrusive.js etc etc Doh! Merci: D – adamwtiko

+0

vous avez enregistré ma journée! –

0

si je suis compris correcte, vous essayez de poster les données au contrôleur, après avoir réussi, vous devez aller à la page d'accueil ?? sinon, pouvez-vous clarifier. ce qui va essayer de vous aider

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

Dans cet exemple, je voudrais en fait revenir à la vue actuelle avec les mêmes données utilisateur, par exemple retour View (utilisateur); – adamwtiko

+0

puis quoi est le problème ?? a essayé de déboguer il est-il frapper l'action sur le contrôleur d'utilisateur ?? –

+0

Qu'il ne se comporte pas d'une manière asynchrone. La page est postée en arrière et Request.IsAjaxRequest() renvoie la valeur false dans l'action d'édition – adamwtiko

0

J'ai eu le même genre de problème ... J'ai mis à jour tous les fichiers js avec la console de package NuGet.

juste mon 2 cents, mais aussi au moment de l'écriture, le fichier jquery.unobtrusive.ajax contient des appels à la fonction jquery dépréciée « .live » (=> il est supprimé de la version jquery 1.9+) jquery live

Je pense qu'il ya comme 4 événements que vous aurez à changer avec .on, maintenant il fonctionne très bien ;-)

Questions connexes