RenderPartialAsync返回System.Threading.Tasks.Task`1 [System.Threading.Tasks.VoidTaskResult]

时间:2015-11-24 11:51:03

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

我正在使用ASP.NET 5 RC1

_MyPartial

@model MyViewModel

<div class="panel panel-primary">
    <div class="panel-body">

        @using (Html.BeginForm())
            {
            @Html.AntiForgeryToken()

            <div class="form-horizontal">
                @Html.ValidationSummary(true)
                @Html.MyHtmlHelperRow(model => model.ShortDistrictName)
                @Html.MyHtmlHelperRowSaveButton(model => model.Id)
            </div>
        }
    </div>
</div>
<div>
    @Html.ActionLink("Back to List", "Index")
</div>

cshtml查看

@model MyViewModel

@{
    ViewBag.Title = "Edit";
}

<h2>@ViewBag.Title</h2>


@Html.RenderPartialAsync("_MyPartial", Model)

@section Scripts {
    @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
}

@Html.RenderPartialAsync("_MyPartial", Model)

除了在html中渲染外,渲染

 System.Threading.Tasks.Task`1[System.Threading.Tasks.VoidTaskResult]

在部分页面呈现的最后一个内容正下方的html中的文本。

如果我将部分行引用更改为非异步

@Html.Partial("_MyPartial", Model)

然后我没有得到这个文本行。

问题:

  1. 为什么我在html

  2. 中获取文本行
  3. 如何摆脱它仍然可以使用RenderPartialAsync?

2 个答案:

答案 0 :(得分:23)

您需要使用await来调用异步方法。 ASP.NET 5增加了在Razor中使用await的功能:

@{await Html.RenderPartialAsync("_MyPartial", Model);}

答案 1 :(得分:8)

使用接受的答案中的语法给了我这个错误:

  

参数1:无法从'void'转换为'object'

     

@await Html.RenderPartialAsync(“_ ProductList”,Model)

RC1中的

我不得不使用花括号和分号:

@{await Html.RenderPartialAsync("_ProductList", Model);}

RenderPartialAsync直接写入响应并返回void(技术上为Task),视图编译器无法将其作为字符串打印。