【问题标题】:Update panel, postbacks and failed updates更新面板、回发和失败的更新
【发布时间】:2013-06-25 16:41:05
【问题描述】:

我在这里感觉很像宋飞传。与 UpdatePanel 有什么关系?

我已经阅读了 2 天的帖子、博客和书籍。

我有一个用于测试目的的 JS 计时器,用于在 10 秒时进行轮询。我希望它刷新更新面板。更新面板包含文字。加载时更新面板会重新填充文字。它不起作用。

javascript:

__doPostBack("<%=litL2Sched.ClientID %>");

这会导致完整的回发,我的页面闪烁,然后我的眼睛充满了悲伤的泪水。

__doPostBack("<%=btnL2Refresh.ClientID %>");

这几乎没有任何作用。有人告诉我这会奏效。当我单击按钮时,它按预期工作,但不会随着计时器而下降。

页面标记:

    <asp:UpdatePanel ID="line2Sched" runat="server" UpdateMode="Conditional" OnLoad="litL2Sched_ResetTable"  >
        <ContentTemplate>

            <asp:Literal runat="server" ID="litL2Sched" ></asp:Literal>
            <asp:Button runat="server" ID="btnL2Refresh" /> 
        </ContentTemplate>
    </asp:UpdatePanel>

我尝试过使用和不使用触发器,我的脚本管理器允许使用部分。

我真正想做的就是在我的低级更新面板上强制回发。

编辑: 间隔代码

var oUpdatePanels = setInterval(function () { postBacks() }, 10000);

function postBacks(){
    __doPostBack("<%=btnL2Refresh.ClientID %>", null);
}

我还有一些其他的东西正在那里进行测试,但不会影响这一点。澄清一下,我有 5 个这样布置的模块,但我只想让其中一个工作并在我理解后进行优化。

【问题讨论】:

  • 尝试将 null 作为 __doPostBack 的第二个参数传递
  • 仍然进行完整的回发。我应该补充一下,我已经在那里很长时间了,“”作为我的第二个参数。
  • 你试过按钮了吗? Literal 控件没有任何事件,因此它不应该导致回发。
  • 有道理,但更新面板不会在计时器上刷新。正如今天早些时候我在玩时的旁注一样,我将按钮的可见属性设置为 false,并且回发转义到整个页面。
  • 与其使用原生 JS 计时器并尝试自己调用回发,不如在标记中使用ASP 计时器。即使您可以让您的方法发挥作用,但对于未来的开发人员来说,使用和维护它会比标记中的一行更难。

标签: c# asp.net updatepanel


【解决方案1】:

需要传递UpdatePanel的ClientID

window.setInterval(function() {
        __doPostBack("<%=line2Sched.ClientID%>", '');
    }, 3000);

ASPX

<asp:UpdatePanel ID="line2Sched" runat="server" UpdateMode="Conditional" OnLoad="litL2Sched_ResetTable" >
    <ContentTemplate>
        <asp:Literal runat="server" ID="litL2Sched" ></asp:Literal>
        <asp:Button runat="server" ID="btnL2Refresh"/> 
    </ContentTemplate>
</asp:UpdatePanel>

<script type="text/javascript">
function postBacks() {
    __doPostBack("<%=line2Sched.ClientID %>", null);
}

var oUpdatePanels = setInterval(postBacks, 1000);
</script>

代码背后:

protected void Page_Load(object sender, EventArgs e)
{

}

protected void litL2Sched_ResetTable(object sender, EventArgs e)
{
    litL2Sched.Text = DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss tt");
}

编辑

您的 javascript 需要如下所示:

<script type="text/javascript">
    function postBacks() {
        __doPostBack("<%=line2Sched.ClientID %>", null);
    }

    var oUpdatePanels = setInterval(postBacks, 1000);
</script>

【讨论】:

  • null"" 都回发整个页面。
  • 呸,再次完整回发。奇怪的是,我转到页面源,我得到以下信息:&lt;div id="MainContent_line2Sched"&gt; 作为 updatePanel 的翻译,__doPostBack("#MainContent_line2Sched", ""); 作为翻译的 javascript。
  • 这很奇怪,我用上面的代码创建了一个空网站,它运行良好。时间异步更新。您如何确定它在执行“完整回发”?
  • 每次在$(document).ready() 发出警报,页面闪烁。
  • 您的代码中的其他地方一定有其他事情发生。上面的代码在空白网站中运行良好。您能否发布任何可能相关的其他代码?
猜你喜欢
  • 2011-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-31
相关资源
最近更新 更多