Asp.net 如何以编程方式调用.net按钮';s是否单击页面加载?

Asp.net 如何以编程方式调用.net按钮';s是否单击页面加载?,asp.net,webforms,Asp.net,Webforms,我有一个onclick事件,类似于: public void OnMyButton_Click(object sender, EventArgs e) 如何从pageload中调用此方法?直接调用该方法即可 OnMyButton_Click(this, EventArgs.Empty); 当然,如果您发现自己以编程方式触发UI事件,您可能需要重新考虑页面的结构。事件处理程序只是普通的方法-您可以从类中定义它们的任何地方调用它们-因此Dan的回答在技术上是正确的,虽然我觉得他遗漏了一些最佳实践

我有一个onclick事件,类似于:

public void OnMyButton_Click(object sender, EventArgs e)

如何从pageload中调用此方法?

直接调用该方法即可

OnMyButton_Click(this, EventArgs.Empty);

当然,如果您发现自己以编程方式触发UI事件,您可能需要重新考虑页面的结构。

事件处理程序只是普通的方法-您可以从类中定义它们的任何地方调用它们-因此Dan的回答在技术上是正确的,虽然我觉得他遗漏了一些最佳实践建议

OnMyButton_Click(this.OnMyButton, null);

与其从加载事件调用事件处理程序,不如将事件处理程序中的代码移到另一个方法中,然后从单击事件处理程序和页面加载方法中调用该方法。

将单击事件处理程序中的代码重构为单独的方法,然后调用新方法

此功能正是您所需要的:

public static void DoClick(this System.Web.UI.WebControls.Button btn)
{
    System.Reflection.MethodInfo m = typeof(System.Web.UI.WebControls.Button)
        .GetMethod("OnClick", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
    m.Invoke(btn, new object[] { EventArgs.Empty });
}

理想情况下,逻辑应该是在业务层,只有web页面处理UI。可能是这样的情况-尽管考虑到我们掌握的信息,我不会给出这样的建议。所讨论的项目可能不够复杂,不足以保证有一个单独的业务层,向这样的项目中添加一个业务层将是一种阻碍,而不是一种好处。