1

我有一个 ASP.Net 更新面板,其中包含我试图从代码隐藏文件更新的控件,方法是将控件的值设置为我想要的任何值,然后调用Update()UpdatePanel 的方法。

我知道要调用 Update() 方法,我需要将 UpdateMode 属性设置为有条件的,所以这就是我所做的,但无论如何我都会收到以下错误:

当 UpdateMode 设置为 Conditional 时,只能在 ID 为“UpdatePanel1”的 UpdatePanel 上调用 Update 方法。

我的属性框如下所示:

特性

我的代码如下所示:

using System;
using System.Timers;

namespace WebApplication2
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            var myTimer = new System.Timers.Timer();
            myTimer.Interval = 1000;

            myTimer.Elapsed += new ElapsedEventHandler(myTimer_Elapsed);

            myTimer.Start();
        }

        void myTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            var newGUID = Guid.NewGuid().ToString();
            Label1.Text = newGUID;
            UpdatePanel1.Update();
        }
    }
}

我的表格如下所示:

我的 ASPX 表格

我的标记如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication2.WebForm1" %>

<!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>
    <style type="text/css">
        #form1
        {
            text-align: center;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:Label ID="Label1" runat="server" style="text-align: center" Text="Label"></asp:Label>
        </ContentTemplate>
    </asp:UpdatePanel>
    </form>
</body>
</html>

为什么这不起作用?

谢谢

4

2 回答 2

1

我建议您查看以下教程。使用的 Timer 控件是 aSystem.Web.UI.Timer而不是 aSystem.Timers.Timer在您的代码中。此外,计时器必须放在更新面板内,以便在触发OnTick事件时触发 AJAX 调用:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ Page Language="C#" %>
<html dir="ltr" xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script runat="server" type="text/c#">
    protected void Timer1_Tick(object sender, EventArgs e)
    {
        Label1.Text = "Panel refreshed at: " + DateTime.Now.ToLongTimeString();
    }
</script>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager runat="server" id="ScriptManager1" />

        <asp:UpdatePanel runat="server" id="UpdatePanel1">
        <ContentTemplate>
            <asp:Timer runat="server" id="Timer1" Interval="1000" OnTick="Timer1_Tick" />
            <asp:Label runat="server" Text="Page not refreshed yet." id="Label1" />
        </ContentTemplate>
        </asp:UpdatePanel>

        <asp:Label runat="server" Text="Label" id="Label2"></asp:Label>
    </form>
</body>
</html>
于 2012-07-18T13:41:17.980 回答
0

以模式查看页面Designer并重命名它,保存,你应该很高兴。这很可能是 VS 的缓存问题,切换设计器模式会强制控件以“设计”模式呈现,因此它应该更新幕后代码以清除错误。

于 2012-07-18T12:27:14.910 回答