C# 在页面加载时调用方法

C# 在页面加载时调用方法,c#,asp.net,function,methods,C#,Asp.net,Function,Methods,我想让这段代码在c#代码背后工作。我知道在C语言中也可以做类似的事情,但是在这里可以吗 protected void Page_Load(object sender, EventArgs e) { Bar.Text = "Updating Information"; InsertData(); Bar.Text = "Information Updated"; } protected void InsertData(object sender, EventArgs e

我想让这段代码在c#代码背后工作。我知道在C语言中也可以做类似的事情,但是在这里可以吗

protected void Page_Load(object sender, EventArgs e)
{
    Bar.Text = "Updating Information";
    InsertData();
    Bar.Text = "Information Updated";
}


protected void InsertData(object sender, EventArgs e)
{
  //loops and statements
}

有什么想法吗?

您可以更改
InsertData()
方法,因为您调用它时没有参数

Bar.Text = "Updating Information";
InsertData(this, EventArgs.Empty);
Bar.Text = "Information Updated";
protected void InsertData()
    {
      //loops and statements
    }

您需要知道发件人还是传递事件参数?您可以简单地将InsertData方法重新定义为

protected void InsertData()
{
  //loops and statements
}
然后通过

Bar.Text = "Updating Information";
InsertData();
Bar.Text = "Information Updated";

两件事。首先,您没有传递预期的参数:

protected void Page_Load(object sender, EventArgs e)
{
    Bar.Text = "Updating Information";
    InsertData(sender, e);
    Bar.Text = "Information Updated";
}


protected void InsertData(object sender, EventArgs e)
{
    //loops and statements
}
第二,这看起来像ASP.NET Web表单。对控件的Text属性所做的更改不会更新UI。要理解原因,您必须理解在您编写的实际代码范围之外发生了什么。ASP.NET WebForms具有非常高的“控制反转”程度;您的代码可以为驻留在IIS Web服务器中的ASP引擎提供服务,并且对其运行时间(甚至存在时间)几乎没有最终控制权

这对你有两大后果;首先,服务器保留的关于每个请求页面的客户端的状态信息量非常低;理想情况下,不保存任何状态(但实际上服务器通常必须跟踪某些“会话状态”,特别是对于需要登录的安全web应用程序)。事实上,您的codebehind类只在呈现页面所需的时间内存在;在此之后,类(以及它试图存储在内存中的任何状态数据)将被处理并进行垃圾收集

其次,对您来说更重要的是,在codebehind中为呈现下一个请求页面所做的任何操作都不会导致客户端的实时更新;代码在codebehind中执行的所有操作,从Page_Load到Page_OnPreRender,都是在将生成的HTML的一位发送回客户端之前执行的。结果是,在codebehind事件处理程序执行期间多次更改窗体上控件的值与客户端看到的内容无关,除非您专门设置了与客户端的额外通信。在调用InsertData()之前更新Bar.Text不会导致客户端看到消息“更新信息”。客户端将看到的所有内容都是“信息更新”,因为这是在所有事件处理程序执行之后,当页面最终呈现为HTML时控件的文本

此类问题通常通过异步体系结构(如AJAX(异步Javascript和XML))来解决。JavaScript在浏览器窗口中对呈现页面的控制水平与WinForms应用程序相当(足以让您仅使用客户端JavaScript就可以使用HTML作为UI编写简单游戏),JavaScript还可以使用一些方法和对象向服务器发送数据请求。因此,为了在插入操作期间保持用户显示的页面的响应性,您可以使用以下技巧。您的页面上会有一个按钮,该按钮不会触发整个页面的完整回发,而是会触发客户端上的Javascript方法,该方法将向服务器发送web服务请求,并使用“更新信息”状态更新Bar UI控件文本的值。服务器将执行一个操作(您的“InsertData()”调用),然后响应客户端的浏览器,这将触发第二个JavaScript方法,该方法将使用“信息更新”再次更新状态


另一方面,实际上可以使用这种基于Javascript的“面向服务的体系结构”为所有内容更新创建整个web应用程序,其中只有一个初始HTML页面提供给客户端浏览器,以及对该页面布局的所有进一步更改,内容和行为由JavaScript控制,JavaScript根据从web服务调用接收的数据更新一个页面的DOM。这样的网站架构有其缺点,但也有一些很大的优点。

-1:为什么要通过sender和e?而且,页面不是“RESTful”的吗?他们是无国籍的。术语“RESTFul”与“REST状态”无关,而“REST状态”在任何情况下都不存在。@JohnSaunders-因为方法需要它。我不该质疑为什么;处理程序的代码被省略了,但可以想象它可以使用它们。我编辑以删除restful部分并强调无状态。我的错。我没有注意到。然而,就你的观点而言,这两种都不太可能需要。页面加载事件处理程序的发送方始终是控件(因为该控件引发自己的事件),而EventArgs本身不包含任何有用的属性。@KeithS请您解释一下这句话:“这样的网站架构有其缺点,但也有一些大的优点。”。使用javaScript DOM更新和Ajax调用的缺点是什么+1为asp.net页面呈现的良好介绍。