【问题标题】:Need help with updatePanel需要有关 updatePanel 的帮助
【发布时间】:2010-09-22 06:43:51
【问题描述】:

我的内容页面

  <asp:updatePanel id="Panel1" runat="server" Visible="true">
         <ContentTemplate>
                <div>
                    blah blah
                </div>
          </ContentTemplate>
    </asp:updatePanel>

    <asp:updatePanel id="Panel2" runat="server" Visible="false">
         <ContentTemplate>
                <div>
                    yada yada
                </div>
          </ContentTemplate>
    </asp:updatePanel>     

代码文件 ..以下代码在提交按钮点击事件的末尾:-

            Panel1.Visible = false;
            Panel2.Visible = true;

现在我早些时候使用 asp:Panel..然后它工作正常..就像面板 1 会隐藏而面板 2 会显示出来..在我将 asp:Panel 更改为 asp:updatePanel 之后事情搞砸了up...现在提交按钮不起作用!

突然出了什么问题??我将其更改为 updatePanel,因此页面不会刷新..这不是我们实现这个东西的方式吗???

       <asp:updatePanel id="Panel1" runat="server">
          <ContentTemplate>
          <div>
     <p>
        Type ur name

                <asp:TextBox ID="name" runat="server">
                </asp:TextBox>
       </p>


        <asp:Button ID="btn" OnClick="btn_Click" runat="server" 
        Text="Submit" />
     </div>

    </ContentTemplate>
            </asp:updatePanel>


   <asp:updatePanel id="Panel2" runat="server" Visible="false">
    <ContentTemplate>
    <div>
       Thank You!

    </div>
    </ContentTemplate>
    </asp:updatePanel>

【问题讨论】:

  • “这不是我们实现这个东西的方式”——如果你理解的话,是的。我的猜测是您的按钮不在 UpdatePanel 内。
  • 您不能以编程方式“隐藏”这样的 UpdatePanel。因为 UpdatePanel 是触发回发的“容器”,然后您在回发时试图“隐藏自己”?如果您考虑一下,这没有任何意义。重新考虑您的解决方案 - 您打算做什么?
  • 我刚刚重新检查了..它仅在 updatePanel 内
  • @user289524 - 哪一个?你能发布完整的 HTML
  • @RPM1984:用户将在文本框中输入一些 txt,然后在单击提交按钮后..将显示一些消息..所以我在一个面板中找到了我的按钮,然后在另一个面板..如果不是这样,还有什么办法实现它?

标签: c# asp.net


【解决方案1】:

http://msdn.microsoft.com/en-us/magazine/cc163413.aspx#S3,您可以阅读

多个更新面板

一个页面可以托管多个 UpdatePanel。默认情况下,当页面上的一个 UpdatePanel 更新时,页面上的其他 UpdatePanel 也会更新。有时这就是您想要的,但通常情况下,您不需要更新每个 UpdatePanel 以响应其他 UpdatePanel。 通过将页面上每个 UpdatePanel 控件的 UpdateMode 属性设置为“有条件的”,您可以选择更新哪些 UpdatePanel 实例(以及何时更新)。然后,当一个 UpdatePanel 更新并调用服务器端事件处理程序时,请在要更新的其他面板上调用 UpdatePanel.Update。这通过减少呈现的控件数量来减少服务器上的负载,并减少响应中的数据量,因为不更新的 UpdatePanel 不会向响应中添加任何内容。

【讨论】:

    【解决方案2】:

    如果您在UpdatePanel 上设置Visible="false",则它根本不会呈现给客户端。因此,如果您正在执行 Ajax 回发,客户端将无法使不可见的 UpdatePanel 可见,因为它根本不存在。

    将 UpdatePanel 视为标记,显示您希望在 Ajax 回发时更新页面的哪些位。对于您的情况,我认为最简单的解决方案是使用 both UpdatePanels 和 Panels。此外,由于您要更新的两个东西(两个面板)彼此相邻,因此不需要两个单独的 UpdatePanel:

    <asp:updatePanel id="UpdatePanel1" runat="server">
      <ContentTemplate>
        <asp:Panel id="Panel1" Visible="true" runat="server">
          blah blah
        </asp:Panel>
        <asp:Panel id="Panel2" Visible="false" runat="server">
          yada yada
        </asp:Panel>
      </ContentTemplate>
    </asp:updatePanel>
    

    然后在代码隐藏中,更改 Panel 控件上的 Visible 属性。

    【讨论】:

    • 等一下,让我马上试试这个。我也想这个,即同时使用两个面板
    【解决方案3】:

    我不知道您的提交按钮在哪里,但可以尝试使用以下命令更新这些面板:

    Panel1.Update();
    Panel2.Update();
    

    【讨论】:

    • 这行不通——因为UpdateModeChildrenAsTriggers 属性尚未设置,它们将是默认值,因此两个UpdatePanel 已经在每次Ajax 回发时更新。不可见的 UpdatePanel 不更新的原因是因为它首先不在客户端上。
    猜你喜欢
    • 2015-06-23
    • 2014-12-26
    • 2013-08-12
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多