相关疑难解决方法(0)

如何从C#中的同步方法调用异步方法?

我有一个public async void Foo()方法,我想从同步方法调用.到目前为止,我从MSDN文档中看到的是通过异步方法调用异步方法,但我的整个程序不是使用异步方法构建的.

这甚至可能吗?

以下是从异步方法调用这些方法的一个示例:http://msdn.microsoft.com/en-us/library/hh300224(v = vs.110).aspx

现在我正在研究从同步方法调用这些异步方法.

c# async-await

757
推荐指数
14
解决办法
54万
查看次数

Async PartialView导致"HttpServerUtility.Execute被阻止..."异常

我有一个部分视图,尝试IEnumerable<Post>使用异步从数据库中检索a ...

方法

public static class PostService
{
    public static int PostsPerPage = 50;

    public static async Task<IEnumerable<Post>> GetRecentAsync(int page = 0)
    {
        return await entityFrameworkDbContext.Posts
            .ToListAsync();
    }
}
Run Code Online (Sandbox Code Playgroud)

PartialView

public async Task<ActionResult> Recent(int page = 0)
{
    return PartialView(await PostService.GetRecentAsync(page));
}
Run Code Online (Sandbox Code Playgroud)

然后,如果我试着打电话给它

@Html.Action("Recent", "Post")
Run Code Online (Sandbox Code Playgroud)

我得到以下异常

HttpServerUtility.Execute在等待异步操作完成时被阻塞.

描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

异常详细信息:System.InvalidOperationException:HttpServerUtility.Execute在等待异步操作完成时被阻止.

为什么我会收到此错误?不应该工作吗?

c# asp.net-mvc entity-framework entity-framework-6 asp.net-mvc-5

79
推荐指数
2
解决办法
4万
查看次数

什么是MVC儿童行动?

我读过MVC(基础书)中的儿童行为,但我真的不知道它是什么?

有人可以解释这些方法吗?

asp.net-mvc

54
推荐指数
2
解决办法
4万
查看次数

39
推荐指数
2
解决办法
3万
查看次数

在MVC 5动作过滤器中进行异步调用

问题

我有一个api GET方法来检索站点配置.我正在使用httpClientGetAsync()方法来做到这一点.

HttpResponseMessage response = await client.GetAsync("api/{0}/config", id);
Run Code Online (Sandbox Code Playgroud)

由于我需要跨站点进行此配置,因此我计划使用全局操作过滤器.

如何在MVC动作过滤器中调用异步方法?或者这个问题有更好的解决方案吗?

我已经看过多个SO问题(MVC 4中的异步动作过滤器),但我没有找到满意的解决方案.

asp.net-mvc async-await

14
推荐指数
1
解决办法
5902
查看次数

用于_Layout的ASP.Net MVC控制器

我正在为MVC创建一个动态菜单系统,只是为了使它工作,我创建了一个菜单的局部视图,它使用下面的语法很好用:

@Html.RenderPartial("_Menu", (Models.Menu)ViewBag.MainMenu)
Run Code Online (Sandbox Code Playgroud)

但是,为此,我必须在每个Controller和每个操作的ViewBag中设置MainMenu和FooterMenu(或任何其他菜单).为了避免这种情况,我想知道是否有推荐的事件可以全局访问ViewBag.如果没有,有人建议将Menu对象传递给会话变量吗?这对我来说听起来不对,但我现在才想到的事情.

更新:

_Layout.cshtml - 我包含对Action的新调用:

@Html.Action("RenderMenu", "SharedController", new { name = "Main" })
Run Code Online (Sandbox Code Playgroud)

SharedController.cs - 添加了新动作:

public ActionResult RenderMenu(string name)
{
    if (db.Menus.Count<Menu>() > 0 && db.MenuItems.Count<MenuItem>() > 0)
    {
        Menu menu = db.Menus.Include("MenuItems").Single<Menu>(m => m.Name == name);
        return PartialView("_MenuLayout", menu);
    }
    else
    {
        return PartialView("_MenuLayout", null);
    }
}
Run Code Online (Sandbox Code Playgroud)

它抛出以下异常:

未找到路径'/'的控制器或未实现IController.

更新2:

所以,问题是我用全名引用了Controller,你只需要控制器的名称减去"Controller".整洁的花絮.所以,对于我的例子,这有效:

@Html.Action("RenderMenu", "Shared", new { name = "Main" })
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc menu partial-views

11
推荐指数
1
解决办法
1万
查看次数