我有一个局部视图,它试图使用异步从数据库中检索IEnumerable<Post>
...
方法
public static class PostService
{
public static int PostsPerPage = 50;
public static async Task<IEnumerable<Post>> GetRecentAsync(int page = 0)
{
return await entityFrameworkDbContext.Posts
.ToListAsync();
}
}
PartialView
public async Task<ActionResult> Recent(int page = 0)
{
return PartialView(await PostService.GetRecentAsync(page));
}
如果我试着把它叫做
@Html.Action("Recent", "Post")
我得到了以下异常
HttpServerUtility.Execute在等待异步操作完成时被阻止。
说明:当前web请求执行过程中发生未处理异常。请查看堆栈跟踪,以了解有关错误的更多信息以及错误在代码中的来源。
异常详细信息: System.InvalidOperationException: HttpServerUtility.Execute在等待异步操作完成时被阻塞。
为什么会出现这个错误?它不应该起作用吗?
发布于 2014-06-11 12:19:06
必须同步调用子操作。Issue 601我也不知道当前的MVC库有没有允许这个功能的更新。
关于问题601的评论,暗示着这个功能被添加到了MVC vNext,又名。MVC6。子操作有望被ViewComponent
替换,后者可以从视图中异步调用,如下所示。完整示例here和here
<div>
@await Component.InvokeAsync("YourComponent")
</div>
有关MVC6的更多信息,请访问http://www.asp.net/vnext/overview/aspnet-vnext/overview
注意:此答案只是一种形式,因此可以将问题标记为已回答
发布于 2018-06-29 18:08:22
此问题的一个解决方法是使方法按照MVC的要求同步,清除SynchronizationContext,调用异步方法并等待结果,然后恢复上下文。
查看我的完整服务器here
发布于 2021-07-26 18:03:14
我有类似的问题,调用一些社交媒体网站的API,并获取我们的最后几个帖子,并将它们显示在我们其中一个网站的主页上。
解决这个问题的方法是使用JavaScript从视图(或您希望显示的部分视图)获取我想要在主页上显示的数据,然后使用ID.innerHTML +=在主页内挂接所获取的数据,如以下代码所示
<div id="ID"></div>
<script>
var ID = document.getElementById('twitter');
var sendHttpRequest = (method, url) => {
var promise = new Promise((resolve, reject) => {
var xhr = new XMLHttpRequest();
xhr.open(method, url);
xhr.onload = () => {
resolve(xhr.response);
};
xhr.send();
});
return promise;
};
window.addEventListener('load', function () {
sendHttpRequest('GET', '////////////// the URL for the View (Or Partial View) /////////').then((responseData) => {ID.innerHTML += responseData})
})
</script>
希望这能帮助那些正在寻找更快解决这个问题的人。
谢谢
https://stackoverflow.com/questions/24072720
复制相似问题