【问题标题】:Why does my MasterPage UpdatePanel call a Page_Load on my ContentPage?为什么我的 MasterPage UpdatePanel 在我的 ContentPage 上调用 Page_Load?
【发布时间】:2018-08-30 17:42:45
【问题描述】:

我的 MasterPage 中的代码每 5 秒在我的内容页面上造成完整的 page_load。可悲的是,这意味着它破坏了我的一些内容页面以及它们的编程方式。我希望单独的 UpdatePanel 只允许更新该区域,而不刷新内容页面上的其他 UpdatePanel 和资源。

我尝试将 Timer 移出 UpdatePanel,将 UpdatePanel 更改为 UpdateMode="Conditional",甚至使用第三方 AjaxPanel (Telerik)。

所有结果都是一样的,内容页面每 5 秒重新加载一次,清除标题模板(如下所示),有时会破坏网站上的某些功能。

在我想出一种方法只进行文字更新而不重新加载其他资源之前,我必须禁用计时器。

如果需要,我很乐意发布更多代码,但我不想提供可能不重要的信息。

MasterPage - Site.Master

<title><%: Page.Title %> - My ASP.Net Site</title>

<asp:UpdatePanel ID="UpdatePanelMenu" runat="server">
    <ContentTemplate>
        <span>Tickets<asp:Literal ID="LiteralUnassignedTickets" runat="server"></asp:Literal></span>
        <asp:Timer ID="TimerAutoRefreshMenu" runat="server" Interval="5000" Enabled="true"></asp:Timer>
    </ContentTemplate>
</asp:UpdatePanel>

【问题讨论】:

  • 您确定 UpdatePanel 是个好主意吗?那么实现 AJAX 轮询呢?或者更好的是 - 使用 SignalR 在发生更改时立即通知客户。
  • 老实说,我只是按照我认为我知道的去做!也许我应该投资其他东西。但是,整个项目都在 ASP.Net 中,使用 UpdatePanels 和 LINQ。如果可以使用项目中的当前技术使其工作,我宁愿不要成为将其他东西带到桌面上的人。
  • UpdatePanel 是 Web 表单中最糟糕的部分之一。您可以做的任何事情来摆脱 UpdatePanel(和 Web 表单)都是一件好事。特别是在这种情况下。它将简化您的页面逻辑(您不必过滤掉部分回发),您不必使用轮询来检索更新(更少的客户端和服务器处理时间,更少浪费的带宽),用户将更快地获得更新,以及通过网络发送的数据量。使用 SignalR 正是它的设计目的。
  • 好吧,我的朋友,这三天的周末我要读书了!谢谢!

标签: asp.net vb.net updatepanel master-pages


【解决方案1】:

如果您必须使用更新面板,请根据条件更新更新面板并将计时器设置为异步触发器(非常重要)。 更新面板在母版页上比在内容页上时更糟糕
最小更改的更好选择是将 setTimeout 设置为执行 ajax 调用以更新未分配票证数量的函数。您可以扩展它以使用 json 对象更新一大堆字段/元素。此外,如果您迁移到 MVC,这些技术会非常有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 2012-03-23
    • 1970-01-01
    相关资源
    最近更新 更多