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>
<asp:DropDownList ID="ddlArea" runat="server" Width="200px" DataTextField="AreaName"
DataValueField="Areaid" AutoPostBack="true" OnSelectedIndexChanged="ddlArea_SelectedIndexChanged">
</asp:DropDownList>
<asp:DropDownList ID="ddlRoom" runat="server" Width="200px" DataTextField="RoomName"
DataValueField="Roomid">
</asp:DropDownList>
</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>
まず、UpdateMode
の使用を思い出したいと思います。
Always
パネルはコンテンツを更新しますページ上のすべての投稿で、部分的なレンダリング投稿または完全な投稿にすることができます。どちらの場合も、パネルのコンテンツが更新されます
Conditional
パネルのコンテンツは、さまざまな条件が満たされた場合にのみ更新されます。
デフォルトでは、子オブジェクトによってトリガーされるイベントが更新をトリガーします。この動作設定を変更できます_ChildrenAsTriggers="false"
_
Triggers
のUpdatePanel
セクションでトリガーを宣言する場合
UpdatePanel.Update()
メソッドを明示的に呼び出す場合
全ページの投稿が更新をトリガーします
次のコードは次のことを行います。
各UpdatePanelは、その子コントロールがイベントを発生させると更新されます
_up1
_という名前のUpdatePanel 1は、子コントロールがイベントを発生させたときに更新されますのみ
_up2
_という名前のUpdatePanel 2は、その子コントロールがイベントを発生させると更新されます
_up2
_という名前のUpdatePanel 2は、定義されたトリガーが起動されたときにも更新されます。この場合、UpdatePanel1の_ddl1OnPanel1
_という名前のDropDownList
がそのSelectedIndexChanged
を起動したときに更新されます。
_up2
_という名前のUpdatePanel 2は、UpdatePanel1の_ddl2OnPanel1
_という名前のDropDownList
がSelectedIndexChanged
を上げるときにも更新されます。これは、コードでthis.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();
}
_
_ <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からの投稿のいずれかですべての投稿で更新されます。
私はこれを4つのupdatepanelでうまく使用しました。
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnableScriptGlobalization="true" CombineScripts="false" ScriptMode="Release">
</asp:ToolkitScriptManager>
非同期ポストバックを実行する場合は、DropdownListsからAutopostback = "True"を削除します。また、現時点で正確に何が問題になっていますか?更新パネルはまったく更新されませんか?
編集。また、この機会に必要ないため、childrenAsTriggersを削除します