ASP.NET Core ViewComponent的Invoke()方法调用无法识别

时间:2016-06-22 22:56:08

标签: c# visual-studio-2015 asp.net-core

在我的带有VS2015的ASP.NET Core RC2应用程序中,我在ViewComponent类中使用了以下Invoke()方法,但是intellisense无法识别Invoke()方法。该应用程序已成功构建,但在运行时,我收到以下错误:

System.Threading.Tasks.Task`1[Microsoft.AspNetCore.Html.IHtmlContent]

ViewComponent类中的Invoke()方法

public IViewComponentResult Invoke(string filter)
        {
            var res = (from p in ctx.Product.ToList()
                       where p.ProductName.StartsWith(filter)
                       select p).ToList();

            return View(res);
        }

从生成上述错误的视图调用Invoke()方法

<div class="alert alert-success">@Component.Invoke("ProductList", "D")</div>

2 个答案:

答案 0 :(得分:3)

这是一个老问题,但我想为ASP.NET核心的1.0 RTM版本提供答案。

@await Component.InvokeAsync("ProductList", new { filter = "D" })

已删除Component.Invoke。因此,即使视图组件中的方法仍被定义为Invoke(而不是InvokeAsync),这是可行的方法,这取决于方法的作用。

作为替代方案,您还可以使用更强类型的版本...

@(await Component.InvokeAsync<ProductList>(new { filter = "D" }))

答案 1 :(得分:0)

  • 您在项目中使用了哪些软件包版本?
  • 目标框架是什么?
  • 环境是什么?
  • 您使用的是哪个网络服务器/监听器?
  • 检查组件的视图是否正确,并且具有正确的模型(在 /Shared/Component/ComponentName/Some.cshtml

尝试使用Async而不是同步组件调用(实际上我甚至没有同步调用)

public async Task<IViewComponentResult> InvokeAsync(string filter)
{
   var res = await (from p in ctx.Products
                       where p.ProductName.StartsWith(filter)
                       select p).ToListAsync();

            return View(res);
}

@await Component.InvokeAsync("ProductList", "D")

我实际上并不知道这段代码是否有效甚至可以编译(我不使用EF)

如果异常仍然相同,请尝试将.net core更新为RTM(preview2-003 ...)并将软件包更新到最新版本。

Here是View Components的文档