0

我想让这段代码在后面的 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

4 回答 4

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

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

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

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

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

于 2013-08-02T19:23:00.067 回答
0

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

protected void InsertData()
    {
      //loops and statements
    }
于 2013-08-02T19:10:34.070 回答
0

需要知道发送者还是传递 EventArgs?您可以简单地将 InsertData 方法重新定义为

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

然后通过调用该方法

Bar.Text = "Updating Information";
InsertData();
Bar.Text = "Information Updated";
于 2013-08-02T19:11:08.103 回答
0
Bar.Text = "Updating Information";
InsertData(this, EventArgs.Empty);
Bar.Text = "Information Updated";
于 2013-08-02T19:07:08.440 回答