我有一个调用功能A()
的按钮当我点击它时,我希望按顺序进行调用:
A()
Page_Load()
现在正在做:
Page_Load()
A()
有没有办法解决这个问题,还是仅仅是设计问题而我无能为力?
答案 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之前发生。
答案 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事件处理中添加的,这意味着新的按钮组不会有与之相关的命令。
答案 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;
}