我必须通过从客户端调用 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 回答
- 0 关注
- 139 浏览
添加回答
举报
0/150
提交
取消
