我目前在“更新”面板中有一个更新面板。例如,我有一个母版页,母版页内的所有内容都在更新面板中,我将其命名为updatepanel1。使用母版页的aspx页面中较小的更新面板称为updatepanel2。
但是我有一个计时器对象,我只希望刷新updatepanel2。但是我的整个页面都刷新而不只是updatepanel2。
我应该如何对其进行编码,以便只刷新updatepanel2而不刷新Updatepanel1,因为我不希望刷新母版页中的整个内容。
编辑:似乎不刷新的原因是因为我在页面中留下了刷新HTML元标记并忘记删除它。
答案 0 :(得分:1)
母版
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" Inherits="WebApplication1.Site1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<asp:ContentPlaceHolder ID="head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate> <asp:Label Id="lblmaster" runat="server" Text="Label"></asp:Label>
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>
ASPX PAGE
<%@ Page Title="" Language="C#" MasterPageFile="~/Site1.Master" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="WebApplication1.WebForm2" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Label ID="labelform" runat="server" Text="Label"></asp:Label>
<asp:Timer ID="Timer1" runat="server" ontick="Timer1_Tick" Interval="10">
</asp:Timer>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick"/>
</Triggers>
</asp:UpdatePanel>
</asp:Content>
ASPX页面的代码隐藏
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
public partial class WebForm2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Timer1_Tick(object sender, EventArgs e)
{
labelform.Text = DateTime.Now.ToString();
// UpdatePanel1.Update();
Label lblmaster = this.Master.FindControl("lblmaster") as Label;
lblmaster.Text = DateTime.Now.ToString();
}
}
}
注意:
将两个更新面板的更新模式设置为“有条件”
在updatePanel2中添加时间控件
在UpadatePanel2中添加AsynhronousTrigger并将控件ID设置为timer并将event事件命名为EventName。
在代码后面的timer_tick外部添加代码并查看。
重要的一点是,你必须对服务器执行asynch调用,并且只更新updatepane的页面集更新模式的特定部分到条件,你必须设置一些条件来更新触发器中的特定部分
希望这可以帮到你
谢谢你继续编码......... :)
答案 1 :(得分:0)
documentation from Microsoft讲述了导致UpdatePanel更新的不同情况。我强烈建议您将更新面板的使用限制为仅需要它的控件,而不是将整个页面包装在其中。
或者更好的是,消除UpdatePanel并使用JQuery或Microsoft Ajax更新您的内容。它的副作用较少。