【问题标题】:How to Prevent whole page post back while updating update panel如何在更新更新面板时防止整个页面回发
【发布时间】:2014-08-14 18:53:15
【问题描述】:

我正在尝试创建一个在页面中显示视频的 asp 4.0 网站。我编写了代码来显示视频并使用更新面板每 10 秒刷新一次内容。但是整个页面正在回发。 这是我的代码。

     <asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
                    <ContentTemplate>       

          <asp:Repeater ID="Repeater1" runat="server">
             <HeaderTemplate></HeaderTemplate>

             <ItemTemplate>
            <table border="1" align="left">
                  <tr><td>
               <div  style="float:left;">
            <asp:Label ID="Label1" runat="server"
            Text='<%# DataBinder.Eval(Container.DataItem, "id") %>' Visible="false"></asp:Label>
                       <div style="background: 
            url(http://www.dollarshaveclub.com/skin/frontend/dsc-test/dsc-
            theme/images/video_placeholder.png) no-repeat; padding: 0px; width: 100px; 
            height: 70px;"></div>
            <br /><asp:LinkButton Text="View" ID="remove" runat="server" 
            ImageUrl="images/remove.png" CommandName="remove" UseSubmitBehavior="False" 
            /><br />
            <span class="projectboldtxt"><%# DataBinder.Eval(Container.DataItem,                  
           "video_caption") %></span>
                         <span class="projectboldtxt"><%# 
            DataBinder.Eval(Container.DataItem, "video_date") %></span>
                        </div>
                                </td></tr>
                                </table>
                        </ItemTemplate>

                        <FooterTemplate><br /></FooterTemplate>

                        </asp:Repeater>


                    </ContentTemplate>
                    <Triggers>

                        <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
                    </Triggers>
                </asp:UpdatePanel>

c#代码如下

    dbOperation db = new dbOperation();
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {

            SqlDataReader dr = db.ExRdr("Select * from video");
            if (dr.HasRows)
            {
                Repeater1.DataSource = dr;
                Repeater1.DataBind();
            }
            else
            {
                Lbl_error.Text = "No data found.";
            }
            db.ConClose();
        }
    }

定时器代码

    protected void Timer1_Tick(object sender, EventArgs e)
    {
        SqlDataReader dr = db.ExRdr("Select * from video");
        if (dr.HasRows)
        {
            Repeater1.DataSource = dr;
            Repeater1.DataBind();
        }
        else
        {
            Lbl_error.Text = "No data found.";
        }
        db.ConClose();
        UpdatePanel1.Update();
    }

我的问题是:如何在更新更新面板时防止整个页面回发??

【问题讨论】:

  • 演变为 MVC/Web API,使用适当的 API 供 JS 使用或停留在全页刷新上。这是经典 ASP.Net AFAIK 的固有设计限制。
  • 你能显示更新面板从哪里开始吗?定时器是否在 UpdatePanel 内?
  • 我已将计时器和工具脚本管理器放在更新面板之外。完整显示为您的请求@Daniel Sanchez
  • @Machinarius 不,Web 表单能够在不回发的情况下向/从服务器发送数据。直接使用 AJAX 或通过 UpdatePanel 就可以解决问题。
  • @mason 你可以看到我也试过了

标签: c# asp.net


【解决方案1】:

您的UpdatePanelItemTemplate 中有一个结束标记,但缺少它的开始标记。

【讨论】:

    猜你喜欢
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 1970-01-01
    相关资源
    最近更新 更多