1

現在、更新パネル内に更新パネルがあります。たとえば、マスター ページがあり、マスター ページ内のすべてが updatepanel1 という名前の updatepanel 内にあるとします。マスター ページを使用する aspx ページにある小さい更新パネルは、updatepanel2 と呼ばれます。

ただし、タイマー オブジェクトがあり、updatepanel2 を更新したいだけです。ただし、updatepanel2 だけでなく、ページ全体が更新されます。

マスター ページのコンテンツ全体を更新したくないので、Updatepanel1 ではなく updatepanel2 のみが更新されるように、どのようにコーディングすればよいでしょうか。

編集:更新されない理由は、ページに更新用の HTML メタ タグを残して、それを削除するのを忘れたためだったようです。

4

2 に答える 2

2

マスターページ

<%@ 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 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();
        }
    }
}

ノート :

  1. 両方の更新パネルの更新モードを「条件付き」に設定します

  2. updatePanel2 に時間コントロールを追加

  3. UpadatePanel2 内に AsynhronousTrigger を追加し、コントロール ID をタイマーに設定し、イベントを EventName としてチェックします。

  4. コード ビハインドの timer_tick evert にコードを追加して確認してください。

ここで重要な点は、サーバーへの非同期呼び出しを実行し、ページの特定の部分のみを更新するために updatepane の更新モードを条件付きに設定し、トリガーでその特定の部分を更新するための条件を設定する必要があることです。

これがあなたを助けることを願っています

コーディングを続けてくれてありがとう........! :)

于 2013-05-27T05:39:21.577 に答える
0

Microsoftのドキュメントでは、UpdatePanel が更新されるさまざまな状況について説明しています。ページ全体をラップするのではなく、更新パネルの使用を必要なコントロールのみに制限することを強くお勧めします。

または、UpdatePanels を削除し、JQuery または Microsoft Ajax を使用してコンテンツを更新することをお勧めします。難しい副作用が少なくなります。

于 2013-05-27T03:22:58.110 に答える