【发布时间】: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 你可以看到我也试过了