如何在母版页上设置Async="true"

3
在我的主页中,我将从数据库加载一些数据。我将其放入异步方法中。对于普通页面,我在顶部放置Async="true",但如果我在主页上这样做,就会出现以下错误:

myproject.master 不包含 AsyncMode 的定义,等等...

我也在互联网上搜索过,但没有找到关于异步主页的任何内容。我使用的后台语言是C#。
有人能帮帮我吗?

请查看此线程 - Claudio P
2个回答

4
该示例使用新的async和await关键字(在.NET 4.5和Visual Studio 2012中可用)来让编译器负责维护异步编程所需的复杂转换。编译器允许您使用C#的同步控制流构造,自动应用必要的转换以使用回调函数以避免阻塞线程。
ASP.NET异步页面必须包含带有Async属性设置为“true”的Page指令
主文件包含主指令。
主页面继承System.Web.UI的MasterPage类,该类不包含AsyncMode属性。因此,您无法在主页面上使用它
普通页面继承System.Web.UI的Page类,其中包含AsyncMode

1
需要注意的是,将AsyncMode设置为true并不意味着可以使用RegisterAsyncTask等功能。这很愚蠢,但必须在页面指令中设置“Async=True”,否则它将无法工作。不确定为什么AsyncMode具有受保护/公共setter。 - Zerkz
@Zerkz 可能是受保护的,以便在适当的时间内从应用程序中的其他类中使用。由于页面根据文档“按需”编译,我假设应用程序在某个时刻读取它并将其设置在类实例中的页面指令中。由于我们的页面继承了Page类,因此我们最终可以在不再产生影响的时刻访问它。 - Matheus Rocha

1
您可以在母版页上进行如下设置。解决方案可在这里:找到。
public abstract class MyBasePage : System.Web.UI.Page
{
    public MyBasePage()
    {
        this.AsyncMode = true;
    }
}

然后在 aspx.cs 文件中将继承更改为类似以下内容:

public partial class WebForm1 : MyBasePage

在除构造函数以外的任何地方设置AsyncMode属性可能会破坏系统。

尝试使用继承并进行检查...希望能帮到您 - Sachu
4
查看了Sangram的回答:Master Page继承自System.Web.UI中的MasterPage类,该类不包含AsyncMode属性。因此,在主页面中无法使用它。 - Kiquenet
1
我已经发现,对于我的用例,我可以绕过这个限制。只要事件处理程序不是异步的,就可以在主页面中运行异步代码。相反,我使用: Task.Run(async () => { await Task.Delay(1000); }).Wait(); ///如果您只想点火并忘记,可以忽略此等待。这可能不适用于所有用例,但它满足了我的需求... - Flemming Bonde Kentved

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接