2011-02-02 3 views
1

J'ai un gabarit qui contient un panneau de mise à jour. L'une des pages de l'application sur laquelle je travaille a un contrôle personnalisé avec des champs asp: textbox. Ce contrôle a également une grille de vue. Lorsqu'un bouton de liaison asp: pour une ligne est cliqué, l'événement OnRowCommand se déclenche et exécute correctement sa magie, dont une partie définit la propriété "Text" d'asp: textbox. Cela marche.Le contrôle ne reflète pas les mises à jour

Mon problème est que la mise à jour n'est pas reflétée dans l'interface utilisateur.

Le UpdatePanel:

<asp:ScriptManager ID="scriptManager" runat="server"> 
    </asp:ScriptManager> 
    <asp:UpdatePanel ID="updPanel" runat="server"> 
     <ContentTemplate> 
       [...more code...] 

Le LinkButton:

<ItemTemplate> 
     <asp:LinkButton ID="LinkButton1" CommandArgument='<%# Eval("ID")%>' CommandName="EDIT" runat="server">Edit</asp:LinkButton>  
</ItemTemplate> 

Le gestionnaire d'événements:

protected void RowCommand(object sender, GridViewCommandEventArgs e) 
     { 
      switch (e.CommandName) 
      { 
       case "EDIT": 
        //stuff happens here 
        [ASP:Textbox].Text = [Result of stuff that happened]; 
        ^this is what isn't reflected on the page 
        break; 

Je sais que je manque quelque chose avec le cycle de vie de la page, mais je m dessinant un blanc.

Répondre

2

Juste passé quelques heures à ce sujet. Comme il semble, les modifications ne sont reflétées que si la propriété CommandName est définie sur autre chose que "Edit" (et toutes les autres commandes standard). Essayez de le régler sur "EditThis", ça marche pour moi.

+1

Oh mon dieu. Je l'ai moi-même vécu il y a quelques mois. Dans un 'ListView' il y a des' CommandName' réservés qui implémentent la fonctionnalité intégrée. Malheureusement, l'équipe de conception de MS n'a pas jugé bon de lancer une quelconque exception si vous définissiez un nom de commande égal à l'un d'eux, même si cela ne provoquait aucune action dans votre conception particulière. Il s'agissait d'un slapper sur le front que je n'ai pas compris avant d'avoir franchi le code source de MS pour voir pourquoi aucun événement n'était soulevé. Honnêtement, je ne sais pas pourquoi ils bloqueraient l'événement, même s'il fait quelque chose en interne. Très perturbant. –

+0

Des conneries! Je ne serai pas en mesure de changer cela jusqu'à demain mais merci de poster! Si cela fonctionne, je vais revenir et "accepter" la réponse. Merci encore! – Chuck

0
protected void RowCommand(object sender, GridViewCommandEventArgs e) 
     { 
      switch (e.CommandName) 
      { 
       case "EDIT": 
        //stuff happens here 
        [ASP:Textbox].Text = [Result of stuff that happened]; 
        ^this is what isn't reflected on the page 
        // ADD THIS 
        updPanel.Update(); 
        break; 
+0

Essayé cela, pas de dés. Dans le débogueur, je peux voir que la zone de texte est définie sur la valeur correcte, mais l'interface utilisateur ne se met jamais à jour. – Chuck

Questions connexes