在页面加载上调用方法

时间:2013-08-02 18:58:03

标签: 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)
{
  //loops and statements
}

任何想法?

4 个答案:

答案 0 :(得分:2)

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

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 Forms。对控件的Text属性的更改不会更新UI。要了解原因,您必须了解在您编写的实际代码范围之外的实际情况。 ASP.NET WebForms具有非常高的“控制反转”;您的代码用于服务驻留在IIS Web服务器中的ASP引擎,并且对它运行的时间(甚至存在)几乎没有最终的控制权。

这对你有两个主要的影响;首先,服务器保留的每个客户端要求提供页面的状态信息量非常低;理想情况下,不会保存任何状态(但实际上,服务器通常必须跟踪某些“会话状态”,尤其是对于需要登录的安全Web应用程序)。事实上,您的代码隐藏类只有在呈现页面时才会存在;之后,类(以及它试图存储在内存中的任何状态数据)被处理掉并进行垃圾收集。

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

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

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

答案 1 :(得分:0)

Bar.Text = "Updating Information";
InsertData(this, EventArgs.Empty);
Bar.Text = "Information Updated";

答案 2 :(得分:0)

您可以更改InsertData()方法,因为您在没有参数的情况下调用它。

protected void InsertData()
    {
      //loops and statements
    }

答案 3 :(得分:0)

您需要了解发件人还是传递EventArgs?您可以简单地将InsertData方法重新定义为

protected void InsertData()
{
  //loops and statements
}

然后通过

调用方法
Bar.Text = "Updating Information";
InsertData();
Bar.Text = "Information Updated";
相关问题