在我的带有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>
答案 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)
尝试使用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的文档