我有一个自定义事件,用于提醒主页面用户控件上的按钮已被按下。
但是,只需单击两次,主页代码后面的操作就会生效。
用户控件加载在更新面板中
用户控制包括以下
public static event EventHandler SignOut;
protected void profileSignOut_Click(object sender, EventArgs e)
{
if (SignOut != null)
SignOut(this, EventArgs.Empty);
}
主页包含以下
protected void Page_Load(object sender, EventArgs e)
{
Views.Profile.SignOut += Profile_SignOut;
LoadUserControl();
}
private void Profile_SignOut(object sender, EventArgs e)
{
MenuButtons.Visible = true;
LastLoadedControl = null;
LoadUserControl();
}
为了完整起见,加载用户控制部分也在default.aspx 中
private string LastLoadedControl
{
get
{
return ViewState["LastLoaded"] as string;
}
set
{
ViewState["LastLoaded"] = value;
}
}
private void LoadUserControl()
{
string controlPath = LastLoadedControl;
ContentPlaceholder.Controls.Clear();
if (!string.IsNullOrEmpty(controlPath))
{
UserControl uc = (UserControl)LoadControl(controlPath);
ContentPlaceholder.Controls.Add(uc);
}
}
双击事件通常会导致PostBack问题,即不适合Page_Load
中的if (!IsPostBack)
。我不能100%确定你的是怎么回事,因为我还没有被要求动态加载用户控件。
但我可以提供一个小小的选择;如果你想从用户控件在父页面上激发一个特定的事件,你可以使用这个:
this.Page.GetType().InvokeMember("MyMethodsName", System.Reflection.BindingFlags.InvokeMethod, null, this.Page, new object[] { });