Update Panel Rendering Tabellenzeile falsch

Ich habe ein Problem, wenn mein asp.net AJAX Update Panel aktualisiert, dass er den Inhalt an der Spitze meiner Tabelle und nicht an der Stelle, an der es unten gehört, meinen Code rendert:

<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>

In meinem Server-Side-Ereignis bemögliche ich gerade das Textfeld.

Antwort auf "Update Panel Rendering Tabellenzeile falsch " 4 von antworten

Haben Sie eine Ansichtsquelle gemacht, um zu bestätigen, dass sie tatsächlich an diesem Speicherort innerhalb des HTML-Codes selbst gerendert wird? Browser rendern manchmal Tags außerhalb der Tabelle, wenn die Tabelle falsch formatiert ist. Es scheint im HTML selbst richtig definiert zu sein, aber ein fehlendes schließendes Tag usw. kann dazu führen, dass es auf diese Weise gerendert wird.

Wenn das Update-Panel zurück auf den Server sendet, sendet es alles zurück (einschließlich Ansichtszustand). Warum nicht einfach javascript? Es wäre viel effizienter.

Ich glaube, es ist aufgrund, wie Sie das Update-Panel verschachteln. Wenn Sie das Aktualisierungsfeld in ein untergeordnetes Element des td und nicht in der Tabelle ändern:

<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>

Sie sollten alle fixiert sein.

1) Erstellen Sie ein benutzerdefiniertes Updatepanel-Steuerelement (Kopieren/Einfügen von SingingEels ) )

2) verwenden Sie dieses benutzerdefinierte Updatepanel-Steuerelement mit dem Attribut RenderedElement="TBODY"

3) verschachteln Sie Ihre Tabelle wie folgt:

<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>