11

1つのページに2つの更新パネルがあります。そして、私はそれらの両方の条件を異なる2つの条件で更新したいと思います。しかし、なぜこれが起こらないのかわかりません。両方にトリガーを指定しましたが、役に立ちませんでした。以下は私のコードです。

どこが間違っているのか教えてください。

実際には、selectedindexchangeが実行されると、最初の更新パネルに3つのドロップダウンリストがあり、2番目の更新パネルのコンテンツも更新されます。

<asp:UpdatePanel ID="upSearch" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
    <ContentTemplate>
        <div style="float: left; width: auto;">

            <asp:DropDownList ID="ddlLocation" runat="server" Width="206px" DataTextField="LocationName"
                DataValueField="Locationid" AutoPostBack="true" OnSelectedIndexChanged="ddlLocation_SelectedIndexChanged">
            </asp:DropDownList>

            &nbsp;
            <asp:DropDownList ID="ddlArea" runat="server" Width="200px" DataTextField="AreaName"
                DataValueField="Areaid" AutoPostBack="true" OnSelectedIndexChanged="ddlArea_SelectedIndexChanged">
            </asp:DropDownList>

            &nbsp;
            <asp:DropDownList ID="ddlRoom" runat="server" Width="200px" DataTextField="RoomName"
                DataValueField="Roomid">
            </asp:DropDownList>
            &nbsp;

        </div>
        <div style="float: left; width: 80px;">
            <asp:Button ID="btnSearch" runat="server" Text="Search" ValidationGroup="vgSearch"
                CssClass="bluebtn" UseSubmitBehavior="false" OnClick="btnSearch_Click" />
        </div>
        <div style="float: left; width: 99%; padding: 5px 0px;">
        </div>
    </ContentTemplate>
  </asp:UpdatePanel>

そして2つ目は次のとおりです:-

<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
<ContentTemplate>
    <asp:Calendar ID="calSchedule" runat="server" NextPrevFormat="FullMonth" OnDayRender="calSchedule_DayRender"
        OnVisibleMonthChanged="calSchedule_VisibleMonthChanged">
        <DayHeaderStyle CssClass="dayheaderStyle" />
        <NextPrevStyle />
        <OtherMonthDayStyle BackColor="#ffffff" />
        <SelectedDayStyle />
        <TitleStyle CssClass="titleStyle" />
        <TodayDayStyle BackColor="#ffffa0" ForeColor="#6699cc" />
        <WeekendDayStyle />
        <DayStyle CssClass="dayStyle" />
    </asp:Calendar>
</ContentTemplate>
<Triggers>
    <asp:AsyncPostBackTrigger ControlID="btnSearch" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
4

4 に答える 4

23

まず第一に、私はの使用を思い出したいと思いますUpdateMode

  • Alwaysパネルは、ページ上のすべての投稿のコンテンツを更新します。部分的なレンダリング投稿でも完全な投稿でもかまいません。どちらの場合も、パネルのコンテンツが更新されます。

  • Conditionalパネルのコンテンツは、さまざまな条件が満たされた場合にのみ更新されます。

    • デフォルトでは、子オブジェクトによってトリガーされるイベントが更新をトリガーします。この動作設定を変更できますChildrenAsTriggers="false"

    • Triggersのセクションでトリガーを宣言するときUpdatePanel

    • UpdatePanel.Update()メソッドを明示的に呼び出す場合

    • 全ページの投稿が更新をトリガーします

次のコードは次のことを行います。

  • 各UpdatePanelは、その子コントロールがイベントを発生させると更新されます

  • 次の名前のUpdatePanel1は、子コントロールがイベントを発生させた場合にのみup1更新されます。

  • 名前の付いたUpdatePanel2up2は、その子コントロールがイベントを発生させたときに更新されます

  • 指定されたUpdatePanel2up2は、定義されたトリガーが起動されたときにも更新されます。この場合、UpdatePanel1のDropDownList指定されたトリガーが起動されたときに更新されます。ddl1OnPanel1SelectedIndexChanged

  • 指名されたUpdatePanel2は、UpdatePanel 1の指名がそれを上げるup2ときにも更新されます。これは、コードで明示的に以下を呼び出すためです。DropDownListddl2OnPanel1SelectedIndexChangedthis.up2.Update();

このコードを微調整することで、新しいページにコピーして貼り付けて実行するだけで、目的の目標を達成できると思います。

次のコードを確認してください(発生したイベントに応じて、日付を示すラベルがさまざまな方法でどのように影響を受けるかを確認してください)。

コードビハインド

    protected void ddl1OnPanel1_SelectedIndexChanged(object sender, EventArgs e)
    {
        this.lblMessageOnPanel1.Text = "From ddl1 " + DateTime.Now.ToString();
        this.calendarOnPanel2.SelectedDate = DateTime.Today.AddDays(1);
        this.lblMessageOnPanel2.Text = "From ddl1 " + DateTime.Now.ToString();
    }

    protected void ddl2OnPanel1_SelectedIndexChanged(object sender, EventArgs e)
    {
        this.lblMessageOnPanel1.Text = "From ddl2 " + DateTime.Now.ToString();
        this.calendarOnPanel2.SelectedDate = DateTime.Today.AddDays(2);
        this.lblMessageOnPanel2.Text = "From ddl2 " + DateTime.Now.ToString();
        this.up2.Update();
    }

ASPX

    <asp:ScriptManager runat="server" ID="scriptManager" />
    <asp:Button Text="Full Post" runat="server" />
    <br />
    <asp:UpdatePanel runat="server" ID="up1" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:DropDownList runat="server" ID="ddl1OnPanel1" AutoPostBack="true" OnSelectedIndexChanged="ddl1OnPanel1_SelectedIndexChanged">
                <asp:ListItem Text="text1" />
                <asp:ListItem Text="text2" />
            </asp:DropDownList>
            <br />
            <asp:DropDownList runat="server" ID="ddl2OnPanel1" AutoPostBack="true" OnSelectedIndexChanged="ddl2OnPanel1_SelectedIndexChanged">
                <asp:ListItem Text="text3" />
                <asp:ListItem Text="text4" />
            </asp:DropDownList>
            <br />
            <asp:Label runat="server" ID="lblMessageOnPanel1" />
            <br />
            <asp:Button ID="Button1" Text="text" runat="server" />
            <br />
            On every post on Panel 1: <%:DateTime.Now %>
        </ContentTemplate>
    </asp:UpdatePanel>

    <br />
    <br />
    <asp:UpdatePanel runat="server" ID="up2" UpdateMode="Conditional">
        <ContentTemplate>
            <asp:Calendar ID="calendarOnPanel2" runat="server" >
                <DayHeaderStyle CssClass="dayheaderStyle" />
                <NextPrevStyle />
                <OtherMonthDayStyle BackColor="#ffffff" />
                <SelectedDayStyle />
                <TitleStyle CssClass="titleStyle" />
                <TodayDayStyle BackColor="#ffffa0" ForeColor="#6699cc" />
                <WeekendDayStyle />
                <DayStyle CssClass="dayStyle" />
            </asp:Calendar>
            <br />
            <asp:Label ID="lblMessageOnPanel2" runat="server" />
            <br />
            On every post On Panel 2: <%:DateTime.Now %>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="ddl1OnPanel1" EventName="SelectedIndexChanged" />
        </Triggers>
    </asp:UpdatePanel>

シンプルな出力

ここに画像の説明を入力してください

UpdatePanel 2でを変更しUpdateMode="Always"て違いを確認できます。変更すると、このパネルは、完全な投稿またはUpdatePanel1からの投稿のいずれかですべての投稿で更新されます。

于 2012-07-06T19:14:18.087 に答える
0

私はこれを4つのupdatepanelでうまく使用しました。

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnableScriptGlobalization="true" CombineScripts="false" ScriptMode="Release">
</asp:ToolkitScriptManager>
于 2018-12-01T08:01:27.377 に答える
-1

非同期ポストバックを実行する場合は、DropdownListsからAutopostback="True"を削除します。また、現時点で正確に何が問題になっていますか?updatepanelはまったく更新されませんか?

編集。また、この機会には必要ないため、childrenAsTriggersを削除します

于 2012-07-06T09:39:32.543 に答える
-2

ネストされた更新パネルを使用している場合は、以下のサンプルコードを参照してください。

<asp:UpdatePanel id="UpdatePanel1" UpdateMode="Conditional" runat="server">
            <ContentTemplate>
                <fieldset>
                <legend>Parent UpdatePanel</legend>
                Last refresh <%=DateTime.Now.ToString() %> <br />
                <asp:Button ID="Button1" runat="server" Text="Refresh Outer Panel" />
                <asp:UpdatePanel ID="UpdatePanel2" runat="server">
                    <ContentTemplate>
                        <fieldset>
                        <legend>Nested UpdatePanel</legend>
                         Last refresh <%=DateTime.Now.ToString() %> <br />
                        <asp:Calendar ID="Calendar1" runat="server"></asp:Calendar>
                        </fieldset>
                    </ContentTemplate>
                </asp:UpdatePanel>
                </fieldset>
            </ContentTemplate>
        </asp:UpdatePanel>

ネストされた更新パネルを使用していない場合は、コードの両方の更新パネルから「UpdateMode」条件を削除します。

于 2012-07-06T08:10:05.423 に答える