ASP.NETページに、コードから更新できるようにするために必要なListView要素があります。私の理解では、MicrosoftはUpdatePanelsとDataBindungを用意しています。リストビューのコンテンツをコード内のプロパティメンバーに「バインド」し、プロパティが変更されたときに自動的にブラウザのビューを更新することを約束します。 しかし、GetStuff()
経由のアイテムの最初の読み込みのみが機能します。デバッグコンソールでは、タイマーがListに新しい要素を追加し続けるのを見ることができますが、ブラウザのビューには到着しません。私は何が欠けていますか? Default.aspxのでASP.NET:CodeBehindからリストビューを更新します
:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="myLittleProject.Default" %>
<%@ Register Src="~/StuffListItemControl.ascx" TagPrefix="stf" TagName="StuffListItem" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<!-- some irrelevant stuff -->
</head>
<bod>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager" runat="server"></asp:ScriptManager>
<!-- some irrelevant stuff -->
<asp:UpdatePanel runat="server" ID="StuffUpdatePanel" UpdateMode="Always">
<ContentTemplate>
<ul>
<asp:ListView ID="StuffBoundContent" runat="server">
<ItemTemplate>
<stf:StuffListItem runat="server" ID="StuffListItemControl" />
</ItemTemplate>
</asp:ListView>
</ul>
</ContentTemplate>
</asp:UpdatePanel>
<!-- some more irrelevant stuff -->
</form>
</body>
</html>
そしてDefault.aspx.csで:
using System.Collections.Generic;
namespace myLittleProject
{
public partial class Default : System.Web.UI.Page
{
public static List<Stuff> StuffContent;
protected void Page_Load(object sender, EventArgs e)
{
StuffContent = Stuff.GetStuff(); // returns a list of three elements from the database
System.Timers.Timer t = new System.Timers.Timer();
t.Interval = 3000;
t.Elapsed += T_Tick;
t.Enabled = true;
}
protected void Page_PreRender(object sender, EventArgs e)
{
StuffBoundContent.DataSource = StuffContent;
StuffBoundContent.DataBind();
}
private void T_Tick(object sender, EventArgs e)
{
StuffContent.Add(new Stuff(StuffContent.Count + 1, DateTime.Now.ToShortDateString(), new string[] { "what", "ever" }));
System.Diagnostics.Debug.WriteLine("[TIMER EVENT] StuffContent.Count = " + StuffContent.Count.ToString());
}
}
}
私はこれが問題であるとは思わなかったでしょう!私のタイマーは期待どおりに確実にメッセージをデバッグコンソールに表示したが、何も起こっていなかった。 ありがとう、特にページライフサイクルのヒントのために! – draconigen