代码之家  ›  专栏  ›  技术社区  ›  Matt

从ascx控件激发事件以更新容器中的某些控件

  •  0
  • Matt  · 技术社区  · 14 年前

    我正在从ascx控件激发一个事件,以便更新ascx控件所属容器中的某些控件。

    ASCX控件通过模式弹出扩展程序显示。当我在ascx中单击一个按钮时,我会触发一个事件,其中包含ascx控件的容器是订阅的。

    事件委托被激发,预期的逻辑在容器的代码隐藏中运行,问题是对容器内部的控件所做的任何更改都不会更新,尽管事件逻辑已被处理。呈现回发结果时,预期的更改不会反映在页面上。

    有什么我应该知道的陷阱吗?

    容器的标记

    <asp:Panel ID="panelTreeViewAttributesTitle" runat="server">
    <asp:Label ID="someLabel" runat="server" Text="Hello Governor" />
    <asp:LinkButton ID="LinkButtonEdit" runat="server" Text="(Edit)" />
    <ajax:ModalPopupExtender BackgroundCssClass="modalBackground" Enabled="True" 
         ID="btnEdit_ModalPopupExtender" PopupControlID="modalPanel" runat="server"
         TargetControlID="LinkButtonEdit" />
    </asp:Panel>
    <asp:Panel ID="modalPanel" runat="server" CssClass="modalPopUp" Style="display: none">
        <xxx:customControl runat="server" ID="myCustomControl" />
    </asp:Panel>
    

    容器的代码隐藏

    protected void Page_Load(object sender, EventArgs e)
    {
    myCustomControl.Updated += eventCaptured;
    if (IsPostBack) return;
    ...
    }
    
    void eventCaptured(object sender, EventArgs e)
    {
    someLabel.Text = "Goodbye Governor";
    }
    

    自定义控件

    <script type="text/javascript">
    function Update() {
        var ajaxManager = $find("<%= RadAjaxManager.GetCurrent(Page).ClientID %>");
        if (ajaxManager != null)
        ajaxManager.ajaxRequest("");
        }
    </script>
    <asp:Panel ID="panelEditPanel" runat="server">
        <asp:Label ID="lblCMA" runat="server" Text="Call me Arnooold." />
    </asp:Panel>
    <asp:Button ID="btnUpdate" runat="server" Text="Update" OnClientClick="Update()" />
    <asp:Button ID="btnCancel" runat="server" Text="Cancel" />
    

    自定义控件的代码隐藏

    public event EventHandler Updated;
    
    protected void AjaxManager_AjaxRequest(object sender, AjaxRequestEventArgs e)
    {
        //Some DB backend logic
        UpdateFinished();
    }
    
    private void UpdateFinished()
    {
        if (Updated == null) return;
        Updated(this, null);
    }
    
    1 回复  |  直到 14 年前
        1
  •  0
  •   William Gross    14 年前