.net 中page 类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net 中page 类相关的知识,希望对你有一定的参考价值。

一直没明白网页从服务器到客户端的这一过程,后台page类一执行,就会把.aspx文件整个传给客户端吗?这个过程怎么传的?传给客户端后,这个page的对象一直在吗,如果关闭网页,这个对象就会立刻消失吗,如果通过链接跳到其它网页,它会在吗?还有,如果客户端执行事件,事件或翻页之类的,aspx是把整个页重新传给客户端还是只传form里的数据 给客户端?我用的aspnetpager分页时,如果点分页太快,页面会一直闪白下,我看别人php的分页, 怎么点都不会闪,这怎么会事呢
还有.aspx文件是怎么到客户端的,是类似Response.Write()吗

.aspx是不会传到客户端的,服务器将.aspx(内含c#代码)生成html文件,然后响应给客户端的。过程是这样的 。在 浏览器输入 www.****.index.aspx这是一个请求, 服务器接受到了这个请求 , index.aspx + index.aspx.cs(继承page类,.cs文件实例化的时候,先实例化page类)这两个文件执行完毕(index.aspx.cs 垃圾回收器会回收),得到HTML代码,然后响应给客户端。 aspnetpager分页是有刷新的 不刷新是用的AJAX,

执行事件 例如 单击事件 ,一个学生成绩表 一页 5 个学生 ,单击下一页 如果使用AJAX 则 服务器只会 将下 5个学生的成绩 传给客户 ,如果不是那么 将会传 HTML+新的5条 记录。
参考技术A http://www.cnblogs.com/xhwy/archive/2012/05/20/2510178.html 讲解页面生命周期的,看懂了,你问的几个问题大部分都是可以理解了。 至于你问的分页问题,分好几种,一种是全部都加载到内存,在已经加载好的内存中取所需要的数据,一种是直接传入当前的页数,根据页数的不同重新加载数据。 还有通过 Ajax实现分页的。 你说的不会闪就是通过ajax进行分页。而 ajax分页,可以借助 asp.net webform中的控件,也可以通过 自己写js代码来实现。
http://www.cnblogs.com/xiaofengfeng/archive/2012/05/20/2511012.html

ASP.Net:在 Page_Load 中调用异步方法

【中文标题】ASP.Net:在 Page_Load 中调用异步方法【英文标题】:ASP.Net: Call an async method in Page_Load 【发布时间】:2018-04-30 16:16:22 【问题描述】:

我有这个 API 客户端,它有一个发送方法,用于将我的对象发布到 Web API 服务并返回 ReturnedResults 类型的对象。 现在我需要在 ASP.net page_load 事件中运行这个 post 方法。 我在这里看到了类似的例子,但是我需要的是从我的异步方法中获取我的返回对象。

我知道我应该使用

PageAsyncTask t = new PageAsyncTask(APIService.Send("test"));

但是我有两个问题,首先 PageAsyncTask 不接受我的 Send 方法作为有效的 Task 类型,我猜这是因为我的方法返回 Task 类型的 Task 所以它抱怨它不能将 Task 转换为 System.Func

还有,一旦我的 ReturnedResults 对象成功执行,我该如何从中取出它?

【问题讨论】:

***.com/questions/35899800/can-page-load-be-async 谢谢,但我看过那些文章,它们都对我的情况没有帮助,我需要从我的异步方法中获取结果,同时让它暂停页面加载,直到等待异步方法结束。 理想情况下,将重载方法放在 Page_Load 中并不是一个好主意。我不确定您的要求如何。但是,它可能需要修改您的系统设计。 复制者:***.com/questions/8242375/… 和 ***.com/questions/34204450/…。 Page_load a 自然是同步的。如果您想优化 IIS 吞吐量(如 MVC/Web API 中的异步控制器方法),Page.RegisterAsyncTask 没有意义。 Page.RegisterAsyncTask 更像是可管理的“即发即弃”。 【参考方案1】:

仅仅因为你不能等待PageAsyncTask 的结果并不意味着任务本身不能启动更多你可以等待的功能。您可以利用这一点来进行异步页面加载。

public void Page_Load(object sender, EventArgs e)

    RegisterAsyncTask(new PageAsyncTask(PageLoadAsync));

 
public async Task PageLoadAsync()

    //perform your actions here, including calling async methods and awaiting their results

    Task<string> downloadTask = new WebClient().DownloadStringTaskAsync("http://www.example.com");

    TextBox1.Title = "We can do some actions while waiting for the task to complete";

    TextBox2.Title = await downloadTask;

确保您的页面被标记为异步。

<%@ Page Language="C#" CodeBehind="Default.aspx.cs" Inherits="Default" Async="true" %>

请记住,上面的代码有点误导。 ASP.NET Web 窗体仍然基于 HTTP 请求/响应模型。在等待某些文件下载时,它实际上无法在客户端更新文本框的标题。相反,它会在 HTTP 响应中更新文本框的标题,一旦所有服务器端处理完成(包括您的异步任务),它就会将响应发送到客户端,此时他们将看到更新后的文本框的标题。

【讨论】:

谢谢,这似乎是一个很好的解决方案,但是如果我向我的方法添加参数,那么 PageAsyncTask 不接受它并给我“无法将任务转换为 System.Func”的错误。我需要参数,因为我必须在将内容发布到 API 之前对其进行处理。 @user65248 你没抓住重点。将参数直接放在调用异步方法的 PageLoadAsync 方法中。不需要实际将参数传递给 PageLoadAsync。 我确实设法通过制作一个像这样的新 Func(async () => await PageLoadAsync("Arguments") 的 lambda 函数来运行它。但是现在我认为它有点像 Fire and Forget我的任务,我需要它暂停 page_load 直到工作完成然后继续加载其他内容,这样我可以根据结果将内容保存到数据库中。也许我在这里走错了路。 @user65248 再一次,你错过了重点。将之前在 Page_Load 中的所有逻辑(除了我展示的异步任务注册)移到 PageLoadAsync 中。 我现在明白了,非常感谢,现在一切正常。

以上是关于.net 中page 类的主要内容,如果未能解决你的问题,请参考以下文章

asp.net razor page 其他

Asp.net Core 如何将 ReflectionIT.Mvc.Paging 与 ViewModel 一起使用?

page类 究竟是啥?page实例 和 html啥关系?

asp.net页面指令page啥属性能指定编辑语言

ASP.Net:在 Page_Load 中调用异步方法

Asp.net Page指令