用户控制,委托和UpdatePanel问题

时间:2016-07-22 16:25:52

标签: c# asp.net user-controls delegates

我目前正在遇到UpdatePanel的问题。我的一个页面有两个用户控件我称之为A和B.

用户控件A有一个包含多个ASP TextBox的UpdatePanel。

def method_name
   puts "amit"
   if RUBY_PLATFORM =~ /win32|win64|\.NET|windows|cygwin|mingw32/i
      system('cls')
    else
      system('clear')
   end
end
method_name

用户控件B有一个UpdatePanel,其中包含一个Panel和一个链接到它的AjaxModalPopup。在Panel中,有一个Repeater和一个ASP按钮。

<asp:UpdatePanel ID="upA" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true" style="position: relative;">
    <ContentTemplate>
      <-- content here -->
    </ContentTemplate>
</asp:UpdatePanel>

当用户单击UserControl B的OK按钮时,它会触发一个委托,该委托调用UserControl A中的一个方法,该方法执行某些字段的更新以及UpdatePanel“upA”的更新方法。

代表:

<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>

在UserControl A的代码背后:

//Delegate Call When the user clicks the ok Button
popup.okHandler = (x) =>
{
   A.ChooseOpticienCode(x.Value);
};

当调用方法upOpticien.Update()时,我收到此错误:

public void ChooseOpticienCode(string code)
{
    <-- some treatments -- >
    upOpticien.Update(); <-- crash here
}

我不明白为什么会收到此错误。我尝试将UpdatePanel的UpdateMode设置为“Always”,应用程序不再崩溃,但字段未更新。

想法?

1 个答案:

答案 0 :(得分:0)

我终于找到了解决问题的方法。我必须使用InvokeMember函数,而不是直接调用委托,以便正确执行委托,并可以编辑各个字段并更新UpdatePanel

 page.GetType().InvokeMember(OkHandler.Method.Name, System.Reflection.BindingFlags.InvokeMethod, null, page, new[] { this });

(这里,OkHandler是我的代表)

但是,请注意,使用匿名方法不起作用,委托指向一个名为InvokeMember的方法是必要的。