1

ここにはかなり単純なコードがいくつかありますが、それが機能しない理由を一生理解することはできません。

Update.aspx次の HTML を含むページがあります。

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>

<div>
    Non Panel <%= Date.Now.ToLongTimeString%>
</div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="False" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:Label ID="lbl" runat="server">Updates in 5</asp:Label>
    </ContentTemplate>
</asp:UpdatePanel>

コードビハインドは次のようになります。

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim t As New Timers.Timer
        t.Interval = 5000
        AddHandler t.Elapsed, AddressOf raiseupdate
        t.Start()
    End Sub

    Private Sub raiseupdate(ByVal sender As Object, ByVal e As System.EventArgs)
        sender.stop()
        lbl.Text = Date.Now.ToLongTimeString
        UpdatePanel1.Update()
    End Sub

これが私が期待していることです。ページの更新パネル内に「Updates in 5」という言葉が表示されます。タイマーが経過し、メソッドが呼び出され、更新パネルのコンテンツを更新raiseupdate()する更新パネルメソッドが呼び出されます。update()

実際に起こることは次のとおりです: タイマーが経過し、更新パネルupdate()メソッドの行に到達しますが、データがページに戻らないようです。つまり、「Updates in 5」という言葉が現在の時刻に置き換えられることはありません。

したがって、メソッドが実際に何をするかについて、ある種の根本的な誤解に遭遇update()したと思いますが、どこが間違っているのかわかりません。これを機能させるにはどうすればよいですか?

4

1 に答える 1

2

2 つの更新プログラムのように見えます。更新パネルからの 1 つとタイマーからの 1 つがコードを台無しにしています。

代わりに、ajaxタイマーを使用して、これをAsyncPostBackトリガーとして追加できます..これでうまくいくはずです..

<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>

<div>
    Non Panel <%= Date.Now.ToLongTimeString%>
</div>
<asp:Timer ID="Timer1" OnTick="Timer1_Tick" runat="server" Interval="5000" />

<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="False" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:Label ID="lbl" runat="server">Updates in 5</asp:Label>
    </ContentTemplate>
   <Triggers>
     <asp:AsyncPostBackTrigger ControlID="Timer1" />
  </Triggers>
</asp:UpdatePanel>

VB コードは次のようになります。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

End Sub

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs)
     lbl.Text = Date.Now.ToLongTimeString

End Sub

これが機能しない場合は、Timer_tick イベントで Update() を手動で呼び出すことができます

于 2012-09-24T20:36:43.427 に答える