【发布时间】:2018-06-11 17:10:28
【问题描述】:
我遇到了异步 ASP.Net MVC 控制器方法的问题。我有一个带有一个视图的控制器,该视图在 HttpGet 上返回到 '/home' 路由。它可以同步工作,但我想测试我的一些数据库功能,所以我将其更改为异步并添加了一些代码来将模型写入我的数据库。
[RoutePrefix("home")]
public class HomeController : AsyncController
{
[HttpGet]
[Route("")]
public async Task<ActionResult> IndexAsync()
{
// DEBUGGING - TEST WRITING USER TO DB
var user = new UserModel(Guid.NewGuid().ToString(), "test", "test", "test@test.com", "tester");
await user.WriteToDatabase();
// DEBUG END
return View("Index");
}
}
如果我删除了 cmets 之间的线,则返回的视图很好,但是,如果我不删除 cmets 之间的线,我会收到以下错误:
System.InvalidOperationException
未找到视图“索引”或其主视图或没有视图引擎 支持搜索的位置。以下位置是 搜索:
~/Views/Home/Index.aspx
~/Views/Home/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
~/Views/Home/Index.cshtml
~/Views/Home/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml
描述:HTTP 500.Error processing request.
详细信息:非网络异常。异常来源(应用程序名称或 对象):System.Web.Mvc。
我已验证视图存在于路径“~/Views/Home/Index.cshtml”中,并且因为页面在同步版本中加载得很好,我知道视图的语法是正确的。数据库写入操作成功,但由于某种原因无法找到视图。
我只是不知道为什么将方法变为异步会突然导致剃刀视图引擎错误。任何帮助表示赞赏。
【问题讨论】:
-
虽然执行异步操作,但您应该将操作名称保留为
Index而不是IndexAsync。这样你也可以在你目前正在做的事情上做return View();。所谓的异步命名约定不适用于动作名称。它会导致您遇到同样的问题。 -
你也不应该使用
AsynController,而只是让你的控制器继承自可以处理异步操作的普通Controller。
标签: c# asp.net .net asp.net-mvc-4 visual-studio-mac