2009-11-27 6 views
1

Je veux effectuer certains appels ajax d'une certaine manière.asp.net mvc complexe mises à jour ajax

J'ai une page. Dans cette page se trouvent 2 ViewUserControls, par exemple control1 et control2.

Control1 a une liste de Ajax.ActionLinks qui appellent Control2 comme ceci:

<%= Ajax.ActionLink(page.Name, "PageDetails", new { pageSysName = page.SysName }, new AjaxOptions { UpdateTargetId = "pageEdit" })%> 

Control2 a une forme Ajax qui met à jour très bien. La méthode Ajax.BeginForm ressemble à ceci:

Ajax.BeginForm("SavePage", "Admin", new AjaxOptions { UpdateTargetId = "pageEditUpdated" }) 

Lorsqu'un utilisateur clique sur le bouton Enregistrer, il met à jour actuellement un div appelé pageEditUpdated avec un contenu de base (« mise à jour ») type de retour du contrôleur.

La partie sur laquelle je suis perplexe est comment mettre à jour control2 pour refléter les nouveaux changements.

Pour résumer, une page a 2 contrôles. J'aimerais que control2 se rafraîchisse et mette à jour un div pour informer l'utilisateur que la mise à jour a été effectuée.

Répondre

2

Avoir votre méthode SavePage retourner un partiel qui reflète le contenu du formulaire mis à jour, y compris le message de mise à jour. Avoir la cible de mise à jour être le "conteneur interne" du formulaire.

<% Ajax.BeginForm("SavePage", "Admin", new AjaxOptions { UpdateTargetId = "innerForm" }) { %} 
    <div id="innerForm"> 
    <% Html.RenderPartial("EditPageContents") %> 
    </div> 
<% } %> 

Votre action de sauvegarde devrait alors revenir

updatedModel.UpdateMessage = "updated"; 
return PartialView("EditPageContents", updateModel); 

et votre vue partielle devrait avoir

<% if (!string.IsNullOrEmpty(UpdateMesage)) { %> 
    <%= Html.Encode(UpdateMessage) %> 
<% } %> 

Honnêtement, cependant, ce serait beaucoup plus facile en utilisant jQuery pour poster le formulaire via AJAX:

$(function() { 
    $('form').submit(function() { 
     $.post($(this).attr('action'), $(this).serialize(), function(data) { 
      $('#updateMessage').html(data).show(); 
     }); 
     return false; 
    }); 
}); 
+0

Bravo pour la réponse. Je n'ai pas encore essayé la version jquery. Je vais devoir en apprendre un peu plus sur jquery pour comprendre cette partie. –

0

Je dois seconder le commentaire de tvanfosson (je voterais pour lui, mais ma réputation n'est apparemment pas encore assez élevée). En tout cas, quand j'ai intégré la fonctionnalité Ajax avec mon site MVC, j'ai trouvé que Microsoft fournissait des méthodes Ajax plutôt maladroites. Donc, à la place, je suis passé à l'utilisation du plugin jQuery.form (bons exemples here). J'ai trouvé que cela rendait les choses beaucoup plus faciles à travailler. Je viens de créer des contrôles utilisateur MVC pour la section de la page que je voulais être ajax, et juste rechargé ce contrôle de l'utilisateur comme nécessaire.