为什么要点击两次按钮才能触发自定义事件?

时间:2015-02-25 16:55:09

标签: c# asp.net events user-controls event-handling

我有一个自定义事件,用于警告主页面已在用户控件上按下按钮。

但是,主页面代码中的操作需要两次单击才能生效。

用户控件在更新面板中加载

用户控件包括以下内容

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);
        }
    }

1 个答案:

答案 0 :(得分:0)

双击事件通常归结为PostBack问题,即不适合if (!IsPostBack)中的Page_Load。我不能100%确定你的用途是什么,因为我还没有被要求动态加载用户控件。

但我可以提供一个轻微的选择;如果您想要从用户控件中触发父页面上的特定事件,可以使用以下命令:

this.Page.GetType().InvokeMember("MyMethodsName", System.Reflection.BindingFlags.InvokeMethod, null, this.Page, new object[] { });