我有一个自定义事件,我想用它来显示我页面上以前隐藏的元素。
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控件变为可见。
答案 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
发出警告