2009-01-29 11 views
6

J'ai un problème quand mon asp.net AJAX Panel mise à jour met à jour rend le contenu en haut de ma table plutôt que dans l'endroit où il appartient ci-dessous est mon code:Panneau rendu ligne du tableau mauvais

<tr> 
    <td> 
    </td> 
    <td> 
     <asp:CheckBox ID="ddCheckbox" runat="server" Text="Checkbox" 
      AutoPostBack="true" OnCheckedChanged="ddCheckboxChanged" /> 
    </td> 
</tr> 

    <asp:UpdatePanel ID="uxUpdatePanel" runat="server" RenderMode="Inline" UpdateMode="Conditional"> 
     <ContentTemplate> 
      <tr> 
      <td> 
       Some Field: 
      </td> 
       <td> 
       <asp:TextBox ID="ddSomeField" runat="server" /> 
       </td> 
      </tr> 
      </ContentTemplate> 
      <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="ddCheckbox" EventName="CheckedChanged" /> 
      </Triggers> 
    </asp:UpdatePanel> 

Dans mon événement côté serveur, je ne fais qu'activer/désactiver la zone de texte.

Répondre

0

Avez-vous créé une source de vue pour confirmer qu'elle est effectivement restituée à cet emplacement dans le code HTML lui-même? Les navigateurs rendent parfois des balises en dehors de la table si la table est mal formée. Il peut sembler être défini correctement dans le code HTML lui-même, mais une balise de fermeture manquante, etc. peut le rendre tel quel. Lorsque le panneau de mise à jour publie sur le serveur, il enregistre tout en arrière (y compris viewstate).

0

Pourquoi ne pas simplement faire un simple javascript? Ce serait beaucoup plus efficace.

4

Je crois que c'est dû à la façon dont vous imbriquez le panneau de mise à jour. Si vous modifiez le panneau de mise à jour à un enfant du td, plutôt que de la table:

<tr> 
    <td> 
    Some Field: 
    </td> 
    <td> 
    <asp:UpdatePanel ID="uxUpdatePanel" runat="server" RenderMode="Inline" UpdateMode="Conditional"> 
     <ContentTemplate> 
     <asp:TextBox ID="ddSomeField" runat="server" /> 
     </ContentTemplate> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="ddCheckbox" EventName="CheckedChanged" /> 
     </Triggers> 
    </asp:UpdatePanel> 
    </td> 
</tr> 

Vous devriez être tous fixés vers le haut.

+0

- Ou peut-être un enfant direct du TR. –

8

1) créer un contrôle UpdatePanel personnalisé (copier/coller à partir SingingEels)

2) utiliser ce contrôle UpdatePanel personnalisé avec un attribut RenderedElement="TBODY"

3) nid votre table comme suit:

<TABLE> 
    <TR> 
    <TD>outside updatepanel</TD> 
    </TR> 
    <SingingEels:SemanticUpdatePanel ID="myUpdatePanel" runat="server" RenderedElement="TBODY"> 
    <ContentTemplate> 
     <TR> 
     <TD>inside updatepanel - 1th row</TD> 
     </TR> 
     <TR> 
     <TD>inside updatepanel - 2nd row</TD> 
     </TR> 
     <TR> 
     <TD>inside updatepanel - last row</TD> 
     </TR> 
    </ContentTemplate> 
    </SingingEels:SemanticUpdatePanel> 
    <TR> 
    <TD>outside updatepanel</TD> 
    </TR> 
</TABLE> 
Questions connexes