2010-04-15 2 views
1

Я работаю над простым демонстрационным проектом, чтобы я мог кое-что узнать о возможностях AJAX ASP.NET. Моя проблема в том, что я не могу заставить UpdatePanel работать правильно с CheckBox внутри него. Вот разметка я использую в моем файле .aspx:Панель обновления ASP.NET с CheckBox - не работает должным образом

<%@ Page Title="" Language="C#" AutoEventWireup="true" CodeBehind="UpdatePanel.aspx.cs" Inherits="Testing.UpdatePanel" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
    <head> 
     <title></title> 
     <style type="text/css"> 
      td 
      { 
       font-family:Arial; 
       font-size:10pt; 
      } 
      #mainTable 
      { 
       background-color:#e3f3ff; 
       border:3px; 
       border-color:#000000; 
       border-style:solid; 
      } 
     </style> 
    </head> 
    <body> 
     <form id="form1" runat="server"> 
      <div> 
       <center> 
        <table id="mainTable"> 
         <tr><td>&nbsp;</td></tr> 

         <asp:ScriptManager ID="SM1" runat="server" /> 
         <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
          <ContentTemplate> 
           <tr> 
            <td><asp:CheckBox ID="chkPaypal" runat="server" Text="Paypal" OnCheckedChanged="PayPal_CheckedChanged" AutoPostBack="true" /></td> 
           </tr> 
           <asp:Panel ID="pnlPayPal" runat="server" Visible="false"> 
            <tr> 
             <td>&nbsp;&nbsp;<asp:Label runat="server" ID="lblPaypalEmail" Text="Email:" /></td> 
             <td><asp:TextBox runat="server" ID="tbPaypalEmail" Text="" Width="250px" /></td> 
            </tr> 
            <tr><td>&nbsp;</td></tr> 
           </asp:Panel> 
          </ContentTemplate> 
          <Triggers> 
           <asp:ASyncPostBackTrigger ControlID="chkPayPal" /> 
          </Triggers> 
         </asp:UpdatePanel> 
         <tr><td>&nbsp;</td></tr> 
         <tr> 
          <td colspan="2"> 
           <center> 
            <asp:Button ID="btnRegister" runat="server" onclick="btnRegister_Click" 
             Text="Register" Height="30px" Width="80px" /> 
           </center> 
          </td> 
         </tr> 
         <tr><td>&nbsp;</td></tr> 
        </table> 
       </center> 
      </div> 
     </form> 
    </body> 
</html> 

В моем коде позади, у меня есть:

using System; 

namespace Testing 
{ 
    public partial class UpdatePanel : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     protected void btnRegister_Click(object sender, EventArgs e) 
     { 

     } 

     protected void PayPal_CheckedChanged(object sender, EventArgs e) 
     { 
      pnlPayPal.Visible = chkPaypal.Checked; 
     } 
    } 
} 

Вместо того, чтобы панель видна, как я ожидаю, что добавление другого «PayPal» в верхней части страницы. Есть идеи?

+0

С кодом нет ничего плохого - это все код есть? – codingbadger

+0

Там я добавил полный код этой страницы. –

ответ

5

Первое, что я вижу в том, что вам не нужна установка Triggers посмотреть на ваши CheckBox поскольку CheckBox находится в UpdatePanel. Вам нужно всего лишь использовать Triggers, если вы хотите, чтобы UpdatePanel обновился на основе чего-то вне его.

Я принял ваш код как есть и испытал его и не могу воссоздать вашу проблему, поэтому должно быть больше. Можете ли вы предоставить больше кода? Может быть, чуть выше его, где определяется таблица?

EDIT: Я думаю, что проблема ваша Panel определяется в table, который рендерит div между вашими tr тегами. Вы не должны этого делать, потому что вы делаете какие-то таблицы wackey. Измените свой код на:

<asp:ScriptManager ID="SM1" runat="server" /> 
<table> 
    <tr> 
     <td><asp:CheckBox ID="chkPaypal" runat="server" Text="Paypal" OnCheckedChanged="PayPal_CheckedChanged" AutoPostBack="true" /></td> 
    </tr> 
</table> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> 
    <Triggers> 
     <asp:ASyncPostBackTrigger ControlID="chkPayPal" /> 
    </Triggers>   
    <ContentTemplate> 
     <asp:Panel ID="pnlPayPal" runat="server" Visible="false"> 
      <table> 
       <tr> 
        <td>&nbsp;&nbsp;<asp:Label runat="server" ID="lblPaypalEmail" Text="Email:" /></td> 
        <td><asp:TextBox runat="server" ID="tbPaypalEmail" Text="" Width="250px" /></td> 
       </tr> 
       <tr><td>&nbsp;</td></tr> 
      </table> 
     </asp:Panel> 
    </ContentTemplate>    
</asp:UpdatePanel> 
+0

Это исправило мою проблему! Большое спасибо! –

Смежные вопросы