3

我在更新面板中有一个按钮,我想更新整个页面。我已经设置ChildrenAsTriggers="false"UpdateMode="Conditional".

我在这里有一些示例代码来演示我的问题。

<asp:UpdatePanel ID="myFirstPanel" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional">
   <ContentTemplate>
      <asp:Button runat="server" ID="myFirstButton" Text="My First Button" onclick="myFirstButton_Click" />
      <asp:Button runat="server" ID="mySecondButton" Text="My Second Button" onclick="mySecondButton_Click" />
   </ContentTemplate>
</asp:UpdatePanel>

<asp:UpdatePanel ID="mySecondPanel" runat="server">
   <ContentTemplate>
       <asp:Label runat="server" ID="myFirstLabel" Text="My First Label"></asp:Label>
    </ContentTemplate>
    <Triggers>
       <asp:AsyncPostBackTrigger ControlID="myFirstButton" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>
<asp:Label runat="server" ID="mySecondLabel" Text="My Second Label"></asp:Label>

以及背后的代码:

protected void myFirstButton_Click(object sender, EventArgs e)
{
  myFirstLabel.Text = "Inside Panel " + DateTime.Now.ToString("mm:ss");
}
protected void mySecondButton_Click(object sender, EventArgs e)
{
  mySecondLabel.Text = "Outside Panel " + DateTime.Now.ToString("mm:ss");
}

单击第二个按钮时,我想更新不在更新面板内的标签。第二个按钮需要在更新面板中。我不想将标签放入更新面板。

4

6 回答 6

6

尝试将 PostBackTrigger 添加到第一个 UpdatePanel,作为第二个按钮。这将告诉更新面板,该按钮应该进行完整的回发。

于 2008-10-21T12:51:18.780 回答
4

ScriptManager.GetCurrent(Page).RegisterPostBackControl(button); 会解决你的问题

于 2008-10-21T13:01:56.310 回答
1

如果您像这样将 PostBackTrigger 添加到第一个更新面板

<Triggers>
   <asp:PostBackTrigger ControlID="mySecondButton" />
</Triggers>

当单击第二个按钮时,这将导致完整的回帖发生。这是我正在寻找的确切行为。

于 2008-10-21T12:51:24.553 回答
0

我有一个类似但稍微复杂一点的案例,我花了一天多的时间才弄清楚这个答案。(答案与@serkan 给出的答案基本相同。我只是在扩展它。)我们有一个 ASP.NET 用户控件,它有一个按钮,单击该按钮会生成图像并触发图像的下载. 这在普通页面上工作得很好,但当用户控件嵌入到更新面板中时就不行了。我不知道如何告诉更新面板只为这个按钮进行定期回发,特别是因为该按钮位于用户控件内,而使用它的页面没有明显的访问权限。

最终奏效的方法非常简单。无需尝试为面板指定回发触发器。相反,在用户控件的 Page_Load 中,我添加了以下内容:

    protected void Page_Load(object sender, EventArgs e)
    {
        // If the chart is within an update panel then we need to tell the script manager
        // to not do an asynch postback on chartdownload.  If we don't, the download
        // doesn't work.
        var scriptManager = ScriptManager.GetCurrent(Page);
        if (scriptManager != null)
        {
            scriptManager.RegisterPostBackControl(ChartSaveButton);
        }
        // Rest of Page_Load followed here...

此外,我创建了ChartSaveButton属性来轻松访问按钮的控件:

    private Control ChartSaveButton
    {
        get { return FindControl("btnDownloadChart"); }
    }

(“btnDownloadChart”是按钮的 ID。)

到达这里是一条痛苦的道路,但我很高兴解决方案如此优雅。我希望这能帮到您。

于 2012-10-17T20:48:31.990 回答
-1

对我来说,这个设置没有意义。请记住,虽然更新面板可能是一种非常容易实现类似 ajax 效果的好方法,但它们并不是在所有情况下都理想。

如果您的页面架构需要像您在示例中那样排列元素,则最好查看使用带有 javascript 的页面或服务方法来更新标签。

于 2008-10-21T12:49:59.750 回答
-2

如果标签不在更新面板中,刷新值的唯一方法是像在正常回发中一样刷新整个页面。您必须重定向到同一页面才能刷新它。即使请求来自更新面板,ajax 框架也知道要处理重定向,因此只需在按钮单击时执行 Response.Redirect(...) 。

于 2008-10-21T12:24:00.770 回答