当前位置: 首页 > 知识库问答 >
问题:

如何从MVC4控件(一个?ascx文件)?

司空瑾瑜
2023-03-14

我的MVC4应用程序被重新分解,以引入一些异步代码。但是,有几个.ascx和.aspx文件是调用异步方法。例如

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SomeModel>" %>
<div id="connection-config-settings">
    <%
        var authorizationContext = this.AuthorizationContext();
        if (await authorizationContext.ConfigurationAuthorization.CanUserUpdateConfig())
        {
     %>
             <pre>The user can update configuration</pre>
      <% }
         else
         {
       %>
             <pre>The user can NOT update configuration</pre>
       <%
         }
       %>
</div>

毫不奇怪,我得到一个错误消息,说await只能在标记为“async”的方法内部使用。我真的不想通过使用GetAwaiter()来阻塞异步调用。GetResult()或。结果或其他黑客。我读了很多关于异步编程的最佳实践,以下两个资源强烈建议永远不要阻塞异步调用。

如何在C#中从同步方法调用异步方法

https://blog.stephencleary.com/2012/07/dont-block-on-async-code.html

如何从我的. ascx文件调用async方法?

共有2个答案

卢俊发
2023-03-14

我采用的解决方案是不在 .aspx 或 .ascx 文件中进行任何异步调用。而是将数据从异步方法调用加载到异步控制器中的 ViewData 中,然后一起绕过问题。

徐凌
2023-03-14

异步在ASP中是可能的。NET Web窗体4.5。

首先,将代码移动到 *.aspx(ascx).cs后端。

其次,像这样注册你的异步方法:

public bool UserCanUpdate = false;

protected void Page_Load(object sender, EventArgs e)
{
    RegisterAsyncTask(new PageAsyncTask(UserCanUpdateAsync));
}

private async Task UserCanUpdateAsync()
{
    var authorizationContext = this.AuthorizationContext();
    UserCanUpdate = await authorizationContext.ConfigurationAuthorization.CanUserUpdateConfig();
}

第三,在Page(Control)指令中添加Control属性

<%@ Control Async="true" Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SomeModel>" %>
 类似资料:
  • 因此,我将一个名为“size”的整数保存到一个名为SettingsStageController的控制器类中。java和我希望通过另一个名为GameStageController的控制器类文件访问该变量。java,但我似乎不知道怎么做。 设置标记控制器。JAVA GameStageController.java

  • 问题内容: 在一个文本文件中,我有150个字。我还有另一个文本文件,大约有100,000行。 如何检查属于第一个文件的每个单词是否在第二个文件中? 我曾考虑过使用,但找不到如何使用它来阅读原始文本中的每个单词。 有没有办法做到这一点?还是其他解决方案? 我尝试使用此shell脚本,但它几乎匹配每一行: 我发现的另一种方法是: 问题答案: 您可以使用: 否则匹配完整的单词: 更新: 根据评论:

  • 问题内容: 我只是想从另一个文件中加入我的Swift类,例如它的测试 PrimeNumberModel.swift PrimeNumberModelTests.swift 两个swift文件都在同一目录中。 问题答案: 我的文件中也遇到了同样的问题,但常规项目文件中却没有。 摆脱: 使用未解析的标识符“ PrimeNumberModel” 我需要测试文件中的基本模块。在我的情况下,我的 目标 称为

  • 如何使用java将文件从一个文件夹复制到另一个文件夹?我试图使用 如果目标文件夹不包含具有相同名称的文件,则此操作有效。如果我尝试将文件粘贴到文件夹中,它会引发IOException。然而,有什么办法可以解决这个问题吗?可能我只想将自动重命名为pasteItem(1)或类似名称的文件粘贴。请建议。 事实上,如果同名文件已经存在,我将为该文件获得一个新名称。我不知道如何复制文件,然后重命名。如果我先

  • 问题内容: 抱歉,我确定一个基本问题,但似乎无法弄清楚。 说我有这个程序,文件名为: 如何在另一个程序中调用它?我试过了: 而不是“ hello world”,我得到了……过去我通过将第一个文件设为类来做到这一点,但我想知道如何正确导入该函数?如果有帮助,我会在我的真实文件中打印字典 问题答案: 您需要打印调用函数的结果,而不是函数本身: 另外,您可以省略子句,而不是: 如果更方便,也可以使用:

  • 问题内容: 有内置的方法吗?如果没有,我该怎么做而又不会花费太多的开销? 问题答案: 不是内置的,但是Knuth的“计算机编程的艺术”中的算法(Waterman的“ Reservoir Algorithm”)很好(在非常简化的版本中): 所述迭代器产生的序列2,3,4 …的因此将0的概率为-这与我们必须替换当前选定的行(被引用的算法的样本大小1的特殊情况的概率- 有关正确性==的信息,请参阅Knu