【问题标题】:ASP.NET-Core MVC6 foreach statement cannot operate on variables of type 'System.Threading.Tasks.Task<..>ASP.NET-Core MVC6 foreach 语句不能对“System.Threading.Tasks.Task<..> 类型的变量进行操作
【发布时间】:2016-05-22 08:52:54
【问题描述】:

我得到一个 menuItems 列表 - 一个来自服务异步方法的对象,它返回...

System.Threading.Tasks.Task<System.Collections.Generic.List<MyNav.Models.Menu.MenuItem>>

调用它的代码是:

var MainHeadings = _menuService.GetListByParentId(0)>;
foreach (var item in MainHeadings)
{
    ...
}

错误出现在“foreach”中的 MainHeadings 上,错误是:

错误 CS1579 foreach 语句无法对“System.Threading.Tasks.Task>”类型的变量进行操作,因为“System.Threading.Tasks.Task>' 不包含 'GetEnumerator' MyNav.DNX 4.5.1、MyNav.DNX Core 5.0 C:\Users\simon\DEV\MyNav 的公共定义\src\MyNav\TagHelpers\Menu\DisplayAllMenuItems.cs 50 活动

调用 _menuService 的类是自定义 TagHelper,我确实尝试将 tagHelper 更改为异步,例如

public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
}

但是结果没有正确渲染。

有没有办法解决这个问题,因为它在服务方法同步时起作用...

【问题讨论】:

    标签: asp.net-mvc asp.net-core asp.net-core-mvc tag-helpers


    【解决方案1】:

    好的解决了这个问题。我相信服务需要在继续之前完成。通过在调用 _menuService 之前放置“等待”,它可以正常工作。

              var MainHeadings = await _menuService.GetListByParentId(0);
    
            foreach (var item in MainHeadings)
            {
                if (item.Header)
                {
                    contentSb.Append(await _menuService.ManageHeader(item, indent));
                }
                else
                {
                    contentSb.Append(_menuService.ReturnSimpleAnchor(item, indent));
                }
            }
    

    我把await放在了线上:

                    contentSb.Append(await _menuService.ManageHeader(item, indent));
    

    它奏效了。这是对异步方法的调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多