現在、UpdatePanelの問題に対処しています。私のページの1つに、AとBと呼ばれる2つのユーザーコントロールがあります。ユーザーコントロール、デリゲート、UpdatePanel問題
ユーザーコントロールAには、複数のASP TextBoxを含むUpdatePanelがあります。
<asp:UpdatePanel ID="upA" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true" style="position: relative;">
<ContentTemplate>
<-- content here -->
</ContentTemplate>
</asp:UpdatePanel>
ユーザーコントロールBには、PanelとAjaxModalPopupがリンクされたUpdatePanelがあります。パネルには、リピーターとASPボタンがあります。
<asp:UpdatePanel runat="server" ID="upB" UpdateMode="Conditional">
<ContentTemplate>
<asp:Button ID="btnActivePopupContainer" runat="server" Style="display: none;" />
<asp:Panel ID="pnlPopupContainer" runat="server" CssClass="modalPopup modalPopupDraggable" Style="display: none;" Width="750px">
<asp:UpdatePanel ID="upPopup" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Panel runat="server" ID="pnlHeader" class="header">
<asp:Label ID="Label1" runat="server" Text="<%$ Resources:global, AttentionPopup %>"></asp:Label>
</asp:Panel>
<article>
<asp:Repeater runat="server" ID="rptPopup" OnItemDataBound="rptPopup_ItemDataBound">
<ItemTemplate>
<-- Content -->
</ItemTemplate>
</asp:Repeater>
</article>
<footer>
<div class="or-spacer">
<div class="mask"></div>
</div>
<div class="footer">
<asp:Panel runat="server" ID="pnlBtnBug">
<asp:Button ID="btnOK" runat="server" CssClass="btn yes" Text="<%$ Resources:global, Ok %>" OnClick="btnOK_Click" />
</asp:Panel>
</div>
</footer>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
<ajax:ModalPopupExtender ID="popupContainer" runat="server" BackgroundCssClass="modalBackground" PopupControlID="pnlPopupContainer" TargetControlID="btnActivePopupContainer" Drag="true" PopupDragHandleControlID="pnlHeader"></ajax:ModalPopupExtender>
</ContentTemplate>
ユーザーがユーザーコントロールBのOKボタンをクリックすると、それはいくつかのフィールドの更新とのUpdatePanel「UPAの更新方法を実行するユーザーコントロールA内のメソッドを呼び出すデリゲートをトリガ"
デリゲート:背後にあるユーザーコントロールAのコードで
//Delegate Call When the user clicks the ok Button
popup.okHandler = (x) =>
{
A.ChooseOpticienCode(x.Value);
};
:
public void ChooseOpticienCode(string code)
{
<-- some treatments -- >
upOpticien.Update(); <-- crash here
}
方法upOpticien.Update()が呼び出されると、私はこのエラーを取得:
System.InvalidOperationException: The Update method can only be called on UpdatePanel with ID 'upOpticien before Render.
このエラーがなぜ発生するのか分かりません。私はUpdatePanelのUpdateModeを "Always"に設定しようとしましたが、アプリケーションはもはやクラッシュしませんでしたが、フィールドは更新されません。
アイデア?
なぜ、トリガを設定するのではなく、手動でUpdatePanelを更新しようとしていますか?それにもかかわらず、ページライフサイクルのその部分で.Update()メソッドを実行できないというエラーが表示されているようです。あなたは、その方法に関する文書を見つけたり、読んだりしてみるべきです。 – Seano666
UpdatePanelに含まれているすべてのTextboxの値を変更するコードがあるため、手動で更新しようとしています。 したがって、コードビハインドで値が変更されるため、イベントは開始されないため、トリガーはここでは不要です。 – TheNawaKer