为了账号安全,请及时绑定邮箱和手机立即绑定

如何在服务器端为 ASP.net WebForms 预渲染带有异步/等待的 UserControl

如何在服务器端为 ASP.net WebForms 预渲染带有异步/等待的 UserControl

C#
翻过高山走不出你 2022-06-18 17:24:29
我必须通过从客户端调用 Javascript/Angular 的 HttpHandler 来处理加载服务器端预呈现用户控件的 WebForms (.Net 4.7) 应用程序。HttpHandler 通过这个旧的“hack”预渲染 UserControlspublic class MyHandler : IHttpHandler{    public override void ProcessRequest(HttpContext context)    {        var page = new Page();        var control = page.LoadControl("~/MyFancyUC.ascx");        var form = new HtmlForm { ID = "Form1" };                       form.Controls.Add(control);                 page.Controls.Add(form);        var stringBuilder = new StringBuilder();        using (StringWriter output = new StringWriter(stringBuilder))        {            HttpContext.Current.Server.Execute(page, output, false);        }        context.Response.Write(stringBuilder.ToString());    }}由于这种风格几年来运行良好,我不能在 UserControls 中使用 async/await 风格,因为我遇到了一个错误,即页面需要具有 Async=true 属性。用户控件如下所示:public partial class MyFancyUC: UserControl{           protected void Page_Load(object sender, EventArgs e)    {        Page.RegisterAsyncTask(new PageAsyncTask(HandleAsync));    }    private async Task HandleAsync()    {        var data = await GetDataAsync();        BindData(data);    }}我已经尝试创建一个简单的页面类,它以编程方式设置异步模式,并在“MyHandler”HttpHandler 中使用它,但这也不起作用。public class AsyncPage : Page{    public AsyncPage()    {        this.AsyncMode = true;    }       }}当我调试 UserControl 时,Page 属性总是显示 AsyncMode=false,IsAsync = false。所以我猜,这是由 HttpServerUtility.Execute() 调用引起的,它不能在异步模式下运行 WebForms 页面。有谁知道如何处理这个?
查看完整描述

2 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

异步 HTTP 处理程序必须实现IHttpAsyncHandlerInterface

异步Page必须将其AsyncMode属性设置为true


查看完整回答
反对 回复 2022-06-18
?
哔哔one

TA贡献1854条经验 获得超8个赞

你必须使用 IHttpAsyncHandler



查看完整回答
反对 回复 2022-06-18
  • 2 回答
  • 0 关注
  • 139 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号