在Page_Load之前调用函数

时间:2009-09-01 19:57:04

标签: c# asp.net

我有一个调用功能A()

的按钮

当我点击它时,我希望按顺序进行调用:

A()
Page_Load()

现在正在做:

Page_Load()
A()

有没有办法解决这个问题,还是仅仅是设计问题而我无能为力?

8 个答案:

答案 0 :(得分:16)

最简单的方法是使用HTML Submit按钮,并在Page_Init

中查看每个回发中是否在表单中
public void Page_Init(object o, EventArgs e)
{
     if(!string.IsNullOrEmpty(Request.Form["MyButtonName"]))
     {
          A();
     }
}

在您的ASP.NET代码中:

<Button Type="Submit" Name="MyButtonName" Value="Press Here To Do Stuff Early!" />

我认为这样可行。

答案 1 :(得分:7)

在page_load之后调用控件事件(例如按钮的单击事件)。在page_load之前,不保证控件完全初始化。如果你真的需要在调用page_load之前根据按钮是否被按下来调用函数,你必须检查请求是否按下按钮(基本上是旧学校ASP)

答案 2 :(得分:5)

您需要在Page_Init中调用您的函数。 Page_Init将在Page_Load之前发生。

这是一个Overview of the ASP.NET Page Lifecycle

答案 3 :(得分:3)

不完全是:在处理Page_Load之类的回发事件之前,ASP.NET总是会调用Button_Click

但是,在处理回发事件后,您可以通过重定向到页面来完成所需的操作。 (使用the Post-Redirect-Get pattern。)

在你的Page_Load方法中,你可以通过检查它是否是一个回发来避免运行任何相关的代码两次:

if (!this.IsPostBack) {
    // Do something resource-intensive that you only want to do on GETs
}

答案 4 :(得分:3)

正如Jeff Sternal回答的那样,Post-Redirect-Get模式是解决这类问题的好方法。

在我的情况下,我有一个日历,如果你点击一个日期,它会将它添加到调度程序。调度程序在每个新日期都有按钮,需要将onclick函数绑定到它们上。

因为新行添加了一个linkbutton(在日历上),所以在代码中新的调度程序日期是在Postback事件处理中添加的,这意味着新的按钮组不会有与之相关的命令。

The page life Cycle

Post Get Redirect

答案 5 :(得分:1)

至少,我认为这不可能不是你问题所描述的方式。当您单击按钮时,它将向服务器发送请求,然后服务器将开始处理它,并按照Joseph发布的ASP.NET页面生命周期进行操作。

或者,您可以尝试对页面进行AJAX调用,而无需重新加载当前的页面,并执行您需要的任何处理。

答案 6 :(得分:0)

这是您要在页面加载之前调用页面初始化的操作。
看一下ASP.net页面生命周期

public void Page_Init(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        //CALL YOU FUNCTION A()    
    }
}
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {

    }
}

答案 7 :(得分:0)

如果您的实际目标是在事件处理程序运行后发生“页面加载代码” - 例如,如果单击按钮会更改数据库中的某些内容,并且您希望更新的数据反映在页面上当它加载时 - 那么你可以让你的“页面加载代码”从ASP.NET page life cycle中被称为以后的方法调用而不是你的事件处理程序,例如Page_PreRender而不是从Page_Load调用它。

例如,这是一个.aspx.cs页面类的简化摘录,该页面类具有在页面填充逻辑之前运行的按钮事件处理程序,以及仅在单击该按钮后在页面上可见的确认消息: / p>

// Runs *before* the button event handler
protected void Page_Load() {
    _myConfirmationMessage.Visible = false;
}

// Runs *after* the button event handler
protected void Page_PreRender() {
    // (...Code to populate page controls with database data goes here...)
}

// Event handler for an asp:Button on the page
protected void myButton_Click(object sender, EventArgs e) {
    // (...Code to update database data goes here...)
    _myConfirmationMessage.Visible = true;
}