【问题标题】:AsyncPostBackTrigger is not updating the update panelAsyncPostBackTrigger 未更新更新面板
【发布时间】:2018-03-23 04:06:20
【问题描述】:

我在 ASP.NET(.ascx 文件)的用户控件中使用更新面板。下面是我的 HTML 标记

<asp:ScriptManager EnablePartialRendering="true"
                   ID="ScriptManager1" runat="server"></asp:ScriptManager>
<div>        
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true" >
        <ContentTemplate>
            <asp:Label ID="Label1" runat="server" /><br />
            <asp:Button ID="Button1" runat="server" Text="Update Panel" OnClick="Button1_Click" />                
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click">
           </asp:AsyncPostBackTrigger>
        </Triggers>
    </asp:UpdatePanel>
</div>

这是我的代码隐藏

public partial class sample: System.Web.UI.Control
{
    protected void Button1_Click(object sender, EventArgs e)
    {

        Label1.Text = DateTime.Now.ToLongTimeString();
        UpdatePanel1.Update();
    }

}

如果我使用 PostBackTrigger,那么它可以正常工作,但回发整个页面(这是我不想要的)我只需要刷新更新面板。

这是我的 aspx 页面标记(它是 Sitecore 驱动的网站,因此所有子布局都加载到 Sitecore 占位符中)

<form id="form2" runat="server">
    <section class="page">
        <sc:Placeholder runat="server" ID="mainPlaceholder" Key="content" />
    </section>
</form>

抱歉,由于某些安全原因,无法发布整个页面

谢谢

【问题讨论】:

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


    【解决方案1】:

    最后,我找到了解决此问题的解决方案。我的整个 HTML 标记保持不变,只需要评论或取消触发器。我刚刚评论了标签的内部 HTML,一切都按预期工作。

    【讨论】:

    • 这是因为默认情况下,子控件(更新面板内的那些)在调用时会自动触发更新。
    【解决方案2】:

    有几件事要尝试。 (它对我来说很好。)

    1. 确保您没有 2 个脚本管理器,一个在页面上,一个在控件上。在 aspx 页面上一个就够了。
    2. 从 aspx 页面中删除用户控件并重新添加用户控件。将您的用户控件拖到 aspx 页面,以确保它已在页面顶部注册。
    3. 移除触发器;你不需要它们。

    您还设置了一些等于默认值的属性,以便您可以删除它们:

    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
    
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Label ID="Label1" runat="server" /><br />
            <asp:Button ID="Button1" runat="server" Text="Update Panel"
                OnClick="Button1_Click" />                
        </ContentTemplate>
    </asp:UpdatePanel>
    
    protected void Button1_Click(object sender, EventArgs e)
    {
        Label1.Text = DateTime.Now.ToLongTimeString();
        //UpdatePanel1.Update();
    }
    

    【讨论】:

    • 感谢@wazz 的快速回答。所以我只有一个 ScriptManager 在我的用户控制中。也尝试了你的建议,但没有运气。尽管如此,该面板仍未更新。我可以看到按钮单击事件正在触发并将值分配给标签文本,但未显示在页面上。
    猜你喜欢
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    相关资源
    最近更新 更多