c# - 带有复选框的 ASP.NET 更新面板 - 无法正常工作

标签 c# asp.net asp.net-ajax

我正在开发一个简单的演示项目,以便了解有关 ASP.NET 的 AJAX 功能的一些知识。我的问题是我似乎无法让 UpdatePanel 与其中的 CheckBox 一起正常工作。这是我在 .aspx 文件中使用的标记:

<%@ 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”复选框。有什么想法吗?

最佳答案

我能看到的第一件事是您不需要 Triggers 设置来查看您的 CheckBox 因为 CheckBox更新面板。只有当您希望 UpdatePanel 根据它之外的内容进行刷新时,您才需要使用 Triggers

我已经按原样使用了您的代码并对其进行了测试,但无法重现您的问题,因此必须进行更多操作。你能提供更多的代码吗?也许就在它上面定义表的地方?

编辑:我认为问题是您的 Panel 是在 table 中定义的,它在您的 tr< 之间呈现一个 div/ 标签。你不应该这样做,因为你在制作一些古怪的 table 。将您的代码更改为:

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

关于c# - 带有复选框的 ASP.NET 更新面板 - 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2646913/

相关文章:

c# - 从 IIS 获取我托管的 Asp.Net 网站的运行 session 计数

c# - 如何按字母顺序对字母数字列表进行排序

javascript - IE8 中奇怪的 js 数组分配错误

jquery - 在 UpdatePanel 中使用 JQuery UI 日期选择器

c# - 在devexpress gridview Templates DetailRow中查找控件

asp.net - 在 SharePoint 和 ASP.Net Web 应用程序之间共享 Windows 身份验证

c# - ASP.NET 网页的计时器应用程序

asp.net fileupload 在没有 AJAX 的情况下回发时消失

asp.net - jQuery 与 ASP.NET MVC 3 书籍/教程?

c# - 使用来自 NUnit 的 Facebook C# SDK