Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在页面加载之前调用函数_C#_Asp.net - Fatal编程技术网

C# 在页面加载之前调用函数

C# 在页面加载之前调用函数,c#,asp.net,C#,Asp.net,我有一个调用函数a()的按钮 当我点击它时,我希望按该顺序拨打电话: A() Page_Load() 现在它正在做: Page_Load() A() 有没有办法解决这个问题,或者只是出于设计,而我对此无能为力?您需要在Page\u Init中调用您的函数。Page_Init将在Page_加载之前发生 这里有一个。不完全正确:ASP.NET在处理诸如按钮单击等回发事件之前总是调用页面加载 但是,在处理回发事件后,可以通过重定向到页面来完成所需的操作。(使用。) 在Page_Load方法中,通过

我有一个调用函数a()的按钮

当我点击它时,我希望按该顺序拨打电话:

A()
Page_Load()
现在它正在做:

Page_Load()
A()

有没有办法解决这个问题,或者只是出于设计,而我对此无能为力?

您需要在Page\u Init中调用您的函数。Page_Init将在Page_加载之前发生


这里有一个。

不完全正确:ASP.NET在处理诸如
按钮单击等回发事件之前总是调用
页面加载

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

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

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

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


或者,您可以尝试在不重新加载当前页面的情况下对页面进行AJAX调用,并执行所需的任何处理。

控制事件(如按钮的单击事件)在页面加载后调用。无法保证在加载页面之前完全初始化控件。如果您确实需要在调用page_load之前根据按钮是否被按下来调用函数,则必须检查请求以检查按钮是否被按下(基本上是老式ASP)

最简单的方法是使用一个HTML提交按钮,检查它是否在每次回发页面的表单中

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!" />


我认为这会起作用。

正如Jeff Sternal回答的那样,后重定向Get模式是解决此类问题的一种好方法

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

由于新行是使用linkbutton(在日历上)添加的,因此在代码中,新的调度程序日期是在回发事件处理中添加的,这意味着新的按钮集不会绑定命令


这是在页面加载之前调用Page Init时要执行的操作
看看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)
    {

    }
}

如果您的实际目标是让“页面加载代码”发生在事件处理程序运行之后——例如,如果单击按钮更改了数据库中的某些内容,并且希望在加载时更新的数据反映在页面上——那么您可以拥有“页面加载代码”从比事件处理程序晚调用的方法(例如
Page\u PreRender
)调用,而不是从
Page\u Load
调用

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

// 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;
}

但是我希望我的函数在你按下按钮时被调用,而不是在每次页面加载时被调用。谢谢你的回答,但是我检查了你的链接,这不是我想要的。当按下按钮时,我正试图做些什么。我不知道如何使用您在此处提供的信息来实现这一点。他不想调用任何方法,他希望在page_Load之前调用事件处理程序。如果您愿意,我可以将您的注意力引向几个不可能的壮举,但总有其他选择……:)我是讨厌的黑客之王。虽然很讨厌,但我喜欢它+1也一样,如果它起作用了,而且没有更干净的东西出现,我会接受你可能会给符文FS一点爱。。。从技术上讲,他比我早几秒钟回答了同样的问题。的确,鲁内夫斯的回答也不错。我接受这个,因为它对我更有意义,帮助我解决了问题。我仍然对runefs的@Margg thx进行了投票,似乎我需要提高我的沟通技能我的解决方案与Anderson完美匹配(没有代码来解释它)Anderson为您提供了一个很好的例子,是一项很好的运动:)