我在事件函数Page_Load(sender, e)
中硬编码btn_RouteMatrix
。代码如下。
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();
}
答案 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”控件。