我必須通過從客戶端調用 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 關注
- 136 瀏覽
添加回答
舉報
0/150
提交
取消
