【问题标题】:How to place Async="true" on masterpage如何在母版页上放置 Async="true"
【发布时间】:2015-06-23 11:07:19
【问题描述】:

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

myproject.master 不包含 AsyncMode 和 blablabla 的定义...

我也在互联网上搜索过,但没有找到异步母版页。我在后台使用的语言是 C#。

谁能帮帮我?

【问题讨论】:

标签: c# asp.net asynchronous master-pages


【解决方案1】:

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

主文件包含主指令。

Master Page 继承了 System.Web.UI 的 MasterPage 类,它不包含 AsyncMode 属性..所以 您不能在 master page 上使用它。

普通页面继承 System.Web.UI 的 Page 类,其中包含 AsyncMode

【讨论】:

  • 请务必注意,将 AsyncMode 设置为 true 不会导致无法使用 RegisterAsyncTask/etc。这很愚蠢,但是您必须在页面的指令中设置“Async=True”,否则它将不起作用。不知道为什么 AsyncMode 有一个受保护的/公共的设置器。
  • @Zerkz 它可能受到保护,以便可以在适当的时候从应用程序中的其他类使用它。由于页面是根据documentation“按需”编译的,我假设应用程序在某些时候会在页面指令中读取它并将其设置在类的实例中。由于我们的页面继承了 Page 类,我们最终可以在更改它不再生效的时刻访问它。
【解决方案2】:

您可以像这样在母版页中设置它。找到解决方案here:

public abstract class MyBasePage : System.Web.UI.Page
{
    public MyBasePage()
    {
        this.AsyncMode = true;
    }
}

然后将aspx.cs文件中的继承改成这样:

public partial class WebForm1 : MyBasePage

当您在构造函数之外的任何其他内容中设置 AsyncMode 属性时,它可能会破坏系统。

【讨论】:

  • 尝试继承和检查..希望它会有所帮助
  • 查看 sangram 答案:母版页继承 System.Web.UI 的 MasterPage 类,它不包含 AsyncMode 属性..所以 你无法在母版页上使用它
  • 我发现,对于我的用例,我可以绕过这个限制。只要事件处理程序不是异步的,在母版页中运行异步代码并非不可能。相反,我使用: Task.Run(async () => { await Task.Delay(1000); }).Wait(); ///U 可以忽略这个等待,如果你只想开火然后忘记。这可能不适用于所有用例,但它满足了我的需求......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多