ASP.Net Async MVC控制器功能导致Razor View Engine错误

问题描述 投票:1回答:1

我遇到异步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", "[email protected]", "tester");
        await user.WriteToDatabase();
        // DEBUG END

        return View("Index");
    }
}

如果我删除注释之间的行,视图返回就好了,但是,如果我不删除注释之间的行,我会收到以下错误:

System.InvalidOperationException

未找到视图“索引”或其主数据或视图引擎不支持搜索的位置。搜索了以下位置:

〜/浏览/首页/的Index.aspx

〜/浏览/首页/ Index.ascx

〜/查看/共享/的Index.aspx

〜/查看/共享/ Index.ascx

〜/浏览/首页/ Index.cshtml

〜/浏览/首页/ Index.vbhtml

〜/查看/共享/ Index.cshtml

〜/查看/共享/ Index.vbhtml

描述:HTTP 500.Error处理请求。

详细信息:非Web异常。异常来源(应用程序或对象的名称):System.Web.Mvc。

我已经验证视图存在于路径“〜/ Views / Home / Index.cshtml”中,并且因为页面在同步版本中加载得很好,我知道视图的语法是正确的。数据库写操作成功,但由于某种原因无法找到视图。

我只是不知道为什么异步转动方法会突然导致剃刀视图引擎错误。任何帮助表示赞赏。

c# asp.net .net asp.net-mvc-4 visual-studio-mac
1个回答
2
投票

AsyncController Class提供向后兼容ASP.NET MVC 3

虽然执行异步操作,但您应该将操作的名称保留为Index而不是IndexAsync。那样你也可以把return View();当作你正在做的事情。所谓的异步命名约定不适用于动作名称。

您也不应该使用AsynController,只是让您的控制器继承自可以处理异步操作的普通Controller

Remarks: ASP.NET MVC 4及更高版本中的Controller类支持异步模式。

[RoutePrefix("home")]
public class HomeController : Controller {
    //Matches GET home
    [HttpGet]
    [Route("")]
    public async Task<ActionResult> Index() {
        // DEBUGGING - TEST WRITING USER TO DB
        var user = new UserModel(Guid.NewGuid().ToString(), "test", "test", "[email protected]", "tester");
        await user.WriteToDatabase();
        // DEBUG END

        return View();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.