[英]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.