ViewComponent视图中的System.Threading.Tasks.Task`1 [Microsoft.AspNetCore.Html.IHtmlContent]

时间:2017-04-09 21:25:17

标签: c# asp.net-mvc asp.net-core-mvc

我是新手查看组件,并且不明白为什么我会收到此错误。

public class Last6ClosedJobsViewComponent :  ViewComponent
{
    private readonly Eva804Context ctx;

    public Last6ClosedJobsViewComponent(Eva804Context context)
    {
        ctx = context;
    }

    public IViewComponentResult Invoke(int id)
    {
        var jobs = from j in ctx.Job
                   .Include(j => j.Site)
                   .Include(j => j.WaterBody)
                   .Where(j => j.Site.SiteID == id && j.InvoiceDate != null)
                   .OrderByDescending(j => j.BookingDate)
                   .Take(6)
                   select j;

        return View(jobs);
    }

}

然后在默认视图中,我只是想在此阶段显示预订日期列表:

@model IEnumerable<Eva804.Models.Job>

<h3>Recently Invoiced Jobs</h3>
<ul>
@foreach (var j in Model)
{
    <li>@j.BookingDate</li>

}
</ul>

然后在网站详情中我有以下内容:

<div class="alert alert-success">@Component.InvokeAsync("Last6ClosedJobs",Model.SiteID)</div>

与我正在反对的例子相比,所有这些看起来都是正确的。

然后在视图中显示一个情人般的绿色部分,漂亮和措辞如下: System.Threading.Tasks.Task`1 [Microsoft.AspNetCore.Html.IHtmlContent]

如何找到此错误?我应该在哪里看?我无法看到我的代码有什么问题吗?

1 个答案:

答案 0 :(得分:19)

您需要@await来处理异步调用,如下所示:

<div class="alert alert-success">@await Component.InvokeAsync("Last6ClosedJobs",Model.SiteID)</div>

InvokeAsync返回一个Task,然后@await等待任务,任务完成后返回结果。