AsyncPostBackTrigger 没有更新更新面板
AsyncPostBackTrigger is not updating the update panel
我在 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,那么它工作正常,但 post 返回整个页面(这是我不想要的)我只需要刷新更新面板。
这是我的 aspx 页面标记(它是 Sitecore 驱动的网站,因此所有子布局都加载到 Sitecore 占位符中)
<form id="form2" runat="server">
<section class="page">
<sc:Placeholder runat="server" ID="mainPlaceholder" Key="content" />
</section>
</form>
抱歉,由于某些安全原因,无法 post 整个页面
谢谢
一些尝试。 (对我来说效果很好。)
- 确保您没有 2 个脚本管理器,一个在页面上,一个在控件上。 aspx 页面上一个就够了。
- 从aspx页面删除用户控件,重新添加用户控件。将您的用户控件拖到 aspx 页面以确保它已在页面顶部注册。
- 删除触发器;你不需要它们。
您还设置了一些等于默认值的属性,以便您可以删除它们:
<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();
}
最后,我找到了解决此问题的方法。我的整个 HTML 标记保持不变,只需要注释或取消触发器。我刚刚评论了标签的内部 HTML,一切都按预期工作。
我在 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,那么它工作正常,但 post 返回整个页面(这是我不想要的)我只需要刷新更新面板。
这是我的 aspx 页面标记(它是 Sitecore 驱动的网站,因此所有子布局都加载到 Sitecore 占位符中)
<form id="form2" runat="server">
<section class="page">
<sc:Placeholder runat="server" ID="mainPlaceholder" Key="content" />
</section>
</form>
抱歉,由于某些安全原因,无法 post 整个页面
谢谢
一些尝试。 (对我来说效果很好。)
- 确保您没有 2 个脚本管理器,一个在页面上,一个在控件上。 aspx 页面上一个就够了。
- 从aspx页面删除用户控件,重新添加用户控件。将您的用户控件拖到 aspx 页面以确保它已在页面顶部注册。
- 删除触发器;你不需要它们。
您还设置了一些等于默认值的属性,以便您可以删除它们:
<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();
}
最后,我找到了解决此问题的方法。我的整个 HTML 标记保持不变,只需要注释或取消触发器。我刚刚评论了标签的内部 HTML,一切都按预期工作。