Page_Load在事件功能期间没有真正触发

时间:2014-05-28 07:41:20

标签: c# asp.net

我在事件函数Page_Load(sender, e)中硬编码btn_RouteMatrix。代码如下。

``UpdateRouteMatrix函数需要很长时间,所以我想在它运行期间加载等待信息。 更改后的属性:

this.form1.Visible = false;
this.imgLoad.Visible = true;

我在事件函数btn_RouteMatrix中硬编码Page_Load(sender,e),但是Page_Load在事件函数期间并没有真正触发,因为页面根本没有变化。令人困惑的是,当我调试它时,确实调用了Page_Load

那么这种情况有什么问题,以这种方式工作是否可行。

protected void btn_RouteMatrix(object sender, ImageClickEventArgs e)
{
    // DAL method
    int n = ...
    int m = ...

    if (n==m)
    {
        ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<script>dialogmodal('All the data already exist');</script>");
    }
    else
    {
        // showing the waiting information instead of the form
        this.form1.Visible = false;
        this.imgLoad.Visible = true;
        Page_Load(sender, e);

        // this method takes pretty long time
        DistancetimematrixBusiness.UpdateRouteMatrix(this.LoginOrganizationId, this.LoginUserID);

        var msg = "Success";

        ClientScript.RegisterStartupScript(ClientScript.GetType(), "myscript", "<script>dialogmodal('" + msg + "');</script>");
    }

    // change the visible attribute, showing data in form instead of waiting info
    this.form1.Visible = true;
    this.imgLoad.Visible = false;

    BindData();            
}

2 个答案:

答案 0 :(得分:1)

你真的不应该手动调用事件处理程序。如果您需要执行与Page_Load类似或相同的操作,请执行以下操作:

protected void Page_Load(object sender, EventArgs e)
{
    DoStuff();
}

protected void btn_RouteMatrix(object sender, ImageClickEventArgs e)
{
    ...
    DoStuff();
}

private void DoStuff()
{
    // put your loading, displaying and other code here
}

答案 1 :(得分:0)

服务器端事件都是在将任何响应发送到客户端之前执行的,因此在您的情况下,表单和图像将被切换,然后在发送响应之前取消切换。

要获得预期的行为,您应该在表单提交(使用javascript)上切换可见性客户端,当服务器响应返回时,整个页面将被更新。

或者您可以切换为使用“UpatePanel”和“UpdateProgress”控件。