asp.net - 如何在文件后面的母版页代码中执行异步函数?
问题描述
我有一个 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
%>
解决方案
该示例使用新的 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。
推荐阅读
- c# - 请求标头中可能有多个 AuthenticationSchemes?
- visual-studio-code - 不允许 devcontainer.json 属性 service/dockerComposeFile
- c++ - 是否可以从链接的静态库 (.lib) 中知道执行 (.exe) 编译日期
- app-store-connect - 企业应用到 App Store 中的私有分发
- taskscheduler - 气流需要更长的时间来安排任务
- mysql - 如何避免计算由 SUM() 内部的连接引起的行?
- javascript - getElementByName 不适用于 html 表中的输入/选择元素
- python - sklearn:在使用 ColumnTransformer 和 Pipeline 时向 feature_importances_/coef_ 添加名称
- go - 从在 GoLand 中实现结构导航到接口
- bash - Bash 局部变量范围最佳实践