2010-07-02 12 views
0

Je suis nouveau à ASP.NET AJAX et j'essaie d'obtenir une zone de texte de statut/bouton pour permettre aux utilisateurs de mettre à jour un statut sans post-retour. J'ai un tag de gestionnaire de script sur la page maître avec "enablepartialrendering" défini sur "true". J'ai aussi un tag updatepanel sur la page de contenu. Quand j'essaye cela, les postbacks de la page et rien ne se passe. Qu'est-ce que je fais de mal? J'utilise ASP.NET 3.5/C#. Merci.Obtenir post-retour et aucune mise à jour lors de l'utilisation ASP.NET AJAX

La page principale a la balise script suivant juste en dessous de la balise form:

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"> 
    </asp:ScriptManager> 

Et quelque part sur la page existe une ContentPlaceHolder:

<asp:ContentPlaceHolder ID="ContentCenter" runat="server"> 
       </asp:ContentPlaceHolder> 

étiquette de contenu associé du ContentPlaceHolder ressemble à ceci:

<asp:Content ContentPlaceHolderID="ContentCenter" runat="server"> 
    <div class="divContainer"> 
     <div class="divContainerBox"> 
      <div class="divContainerTitle"> 
       Network Activity</div> 
      <div class="divContainerRow"> 
       <asp:Panel ID="pnlStatusUpdate" runat="server"> 
        <asp:TextBox Width="400" Height="50" Style="font-size: 9px; padding-left: 0px; padding-right: 0px;" 
         ID="txtStatusUpdate" runat="server"></asp:TextBox> 
        <br /> 
        <asp:Button Style="font-size: 9px; padding-left: 0px; padding-right: 0px;" ID="BtnAddStatus" 
         runat="server" Text="Add" /><br /> 
        <asp:Repeater ID="repFilter" runat="server"> 
         <ItemTemplate> 
          <asp:Label ID="lblMessage" runat="server" Text='<%# ((Alert)Container.DataItem).Message %>'></asp:Label> 
         </ItemTemplate> 
         <SeparatorTemplate> 
          <hr /> 
         </SeparatorTemplate> 
        </asp:Repeater> 
        <asp:Label ID="lblMessage" runat="server"></asp:Label> 
       </asp:Panel> 
      </div> 
     </div> 
    </div> 
</asp:Content> 

Et voici la méthode serveur. Il ne renvoie rien - il envoie les données à "SaveStatusUpdate" à la base de données. La prochaine mise à jour apparaîtra à la prochaine publication de la page. Ce que je veux est pas de publication et pour le texte entré qui était entrée (plus tout texte qu'un ami pourrait avoir entré) à apparaissent lorsque le bouton de mise à jour de statut est cliqué.

protected void BtnAddStatusClick(object sender, EventArgs e) 
     { 
      var su = new StatusUpdate 
      { 
       CreateDate = DateTime.Now, 
       AccountId = _userSession.CurrentUser.AccountId, 
       Status = txtStatusUpdate.Text 
      }; 

      _statusRepository.SaveStatusUpdate(su); 
      _alertService.AddStatusUpdateAlert(su); 

     } 

Je suppose que quelqu'un pourrait demander ce que la méthode « AddStautsUpdateALert » ressemble, si elle est ici. Le "_alertMessage" est la mise à jour d'état. Comment l'afficher avec AJAX?

public void AddStatusUpdateAlert(StatusUpdate statusUpdate) 
     { 
      _alert = new Alert 
         { 
          CreateDate = DateTime.Now, 
          AccountId = _userSession.CurrentUser.AccountId, 
          AlertTypeId = (int) AlertType.AlertTypes.StatusUpdate 
         }; 
      _alertMessage = "<div class=\"AlertHeader\">" + GetProfileImage(_userSession.CurrentUser.AccountId) + 
          GetProfileUrl(_userSession.CurrentUser.UserName) + " " + statusUpdate.Status + "</div>"; 
      _alert.Message = _alertMessage; 
      SaveAlert(_alert); 
      SendAlertToFriends(_alert); 

     } 

Répondre

1

Les panneaux de mise à jour publient toujours sur le serveur - ils ne renvoient pas tout le document HTML au client. Au lieu de cela, ils retournent la partie de la page contenue dans votre <asp:UpdatePanel> et remplacer son contenu. Tant que BtnAddStatus est dans le panneau de mise à jour, le rendu partiel de la page est activé et vous n'avez pas désactivé les déclencheurs des panneaux de mise à jour, le bouton doit déclencher votre événement côté serveur (il n'appelle pas directement la méthode AddStatusUpdateAlert).

Pour plus de détails, voir "Understanding Partial Page Updates with ASP.NET AJAX". (Il y avait un bon article sur le même site, avec des diagrammes extrêmement utiles, mais il a disparu.)