繁体   English   中英

如何在ASP.net WebForms的服务器端使用async / await预渲染UserControl

[英]How to prerender a UserControl with async/await on server-side for ASP.net WebForms

我必须处理一个WebForms(.Net 4.7)应用程序,该应用程序通过从客户端通过Javascript / Angular调用HttpHandler来加载服务器端预渲染的UserControl。

HttpHandler通过这个旧的“ hack”来呈现UserControls

public 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属性。

UserControls看起来像这样:

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页面。

有人知道如何处理吗?

异步HTTP处理程序必须实现IHttpAsyncHandler接口

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

您必须使用IHttpAsyncHandler

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM