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

zoa*_*oaz 16 asp.net-core-mvc asp.net-core

我正在使用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>
Run Code Online (Sandbox Code Playgroud)

cshtml 视图

@model MyViewModel

@{
    ViewBag.Title = "Edit";
}

<h2>@ViewBag.Title</h2>


@Html.RenderPartialAsync("_MyPartial", Model)

@section Scripts {
    @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
}
Run Code Online (Sandbox Code Playgroud)

这条线

@Html.RenderPartialAsync("_MyPartial", Model)
Run Code Online (Sandbox Code Playgroud)

除了渲染html,呈现

 System.Threading.Tasks.Task`1[System.Threading.Tasks.VoidTaskResult]
Run Code Online (Sandbox Code Playgroud)

html中的文本直接位于部分页面呈现的最后一个内容的下方.

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

@Html.Partial("_MyPartial", Model)
Run Code Online (Sandbox Code Playgroud)

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

问题:

  1. 为什么我在html中获得文本行

  2. 我如何摆脱它仍然能够使用RenderPartialAsync?

Ste*_*ary 27

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

@{await Html.RenderPartialAsync("_MyPartial", Model);}
Run Code Online (Sandbox Code Playgroud)


dav*_*ben 8

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

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

@await Html.RenderPartialAsync("_ ProductList",Model)

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

@{await Html.RenderPartialAsync("_ProductList", Model);}
Run Code Online (Sandbox Code Playgroud)

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