首页 > 解决方案 > 如何在文件后面的母版页代码中执行异步函数?

问题描述

我有一个 ASP.Net Framework (4.7) 表单应用程序。

所有页面都使用母版页模板。在文件后面的母版页代码中,我正在调用一个需要一些时间的函数(异步)

站点.Master.cs

public void Page_Load(object sender, EventArgs e)
{
   Page.RegisterAsyncTask(new PageAsyncTask(LoadUserFromActiveDirectoryAsync));
}

public async Task LoadUserFromActiveDirectoryAsync()
{
   var currentUser = await << some async method in different library >>;
   CurrentUser = currentUser;
}

当我运行它时,我得到一个错误:

此操作要求页面是异步的(Async 属性必须设置为 true)。

我知道我应该Async="true"在我的应用程序中的每个 aspx 文件中进行设置。但是有没有办法我可以在母版页中设置这个选项?

Site.Master

<% Master 
     Language="C#" 
     AutoEventWireup="true" 
     CodeBehind="Site.master.cs" 
     Inherits="WebApp.SiteMaster"
     Async="true"            // this is not valid for Master Page 
%>

标签: asp.netmaster-pages

解决方案


该示例使用新的 async 和 await 关键字(在 .NET 4.5 和 Visual Studio 2012 中可用)让编译器负责维护异步编程所需的复杂转换。编译器允许您使用 C# 的同步控制流构造编写代码,并且编译器会自动应用使用回调所需的转换以避免阻塞线程。ASP.NET 异步页面必须包含 Async 属性设置为“true”的 Page 指令。

主文件包含主指令。

母版页继承了 System.Web.UI 的 MasterPage 类,它不包含 AsyncMode 属性。所以您不能在母版页上使用它。

Normal Page 继承了 System.Web.UI 的 Page 类,其中包含 AsyncMode。

信用:https ://stackoverflow.com/a/31001383/9787228


推荐阅读