在我的自定义事件中无法执行任何操作

时间:2016-05-02 07:28:38

标签: c# asp.net events

我有一个自定义事件,我想用它来显示我页面上以前隐藏的元素。

ASPX:

<%@ Register Src="~/Controls/EditSync.ascx" TagPrefix="IP" TagName="EditSync" %>

<asp:Content ID="main" ContentPlaceHolderID="body" runat="server">

//Some unrelated controls

    <fieldset id="fsEditPlugin" runat="server" class="inputForm" style="width:450px;" visible="false">
        <IP:EditSync id="ctlEditSync" runat="server" />
    </fieldset>
</asp:Content>

代码背后:

protected void Page_Load(object sender, EventArgs e)
{
    this.ctlDelivery.EditPlugin += new EventHandler(onEditPlugin);
    if (!Page.IsPostBack)
    {
        //Some more unrelated things
    }
}

public void onEditPlugin(object sender, EventArgs e)
{
    System.Diagnostics.Debug.Write(((ip.Controls.EditPluginEventArgs)e).type);
    fsEditPlugin.Visible = true;
}

显示调试消息。我可以在事件处理程序中放置断点并且它们已到达,但无论我尝试什么,我都无法操纵我的事件处理程序中的页面。 fsEditPlugin不是隐藏的任何其他内容的子代。我试过的一些事情:

//I've tried this:
<fieldset id="fsEditPlugin" runat="server" class="inputForm" style="width:450px; display:none;">
//code behind:
fsEditPlugin.Style.Add("display", "inline");

//I've tried this:
<fieldset id="fsEditPlugin" runat="server" class="inputForm" style="width:450px;">
</fieldset>
//Code behind:
fsEditPlugin.Controls.Add(new LiteralControl("TEST"));

似乎没什么用。我的Page_Load中没有任何内容会干扰控件。

该事件是从另一个子Web用户控件触发的。因此,当我按下另一个子Web用户控件中的按钮时,我想让EditSync控件变为可见。

1 个答案:

答案 0 :(得分:0)

好的,所以我终于设法解决了这个问题!

问题是我触发事件的按钮来自更新面板:

<asp:UpdatePanel ID="UpdatePanel4" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <IP:Delivery id="ctlDelivery" runat="server" /> <% /* this is a web user control */ %>
    </ContentTemplate>
</asp:UpdatePanel>

我通过在ctlDelivery的Page_Load中添加以下行来解决这个问题:

ScriptManager.GetCurrent(this.Page).RegisterPostBackControl(btnEdit); //btnEdit is the button that fires my custom event.

向EvilDr和他的answer to another question

发出警告