【问题标题】:Action does not find View or its master动作找不到 View 或其主人
【发布时间】:2016-11-08 10:44:16
【问题描述】:

我有以下操作:

public class ArticlesController : Controller
{

    public ActionResult Article01()
    {
        return View();
    }
}

返回视图,一切似乎都正常。

现在我尝试添加 ActionName:

    [ActionName("bla-bla-article-1")]
    public ActionResult Article01()
    {
        return View();
    }

现在调用:/Article/Article01 返回

'找不到资源。'

现在我试试这个:

[ActionName("bla-bla-article-1")]
public ActionResult Article01()
{
    return View("~/Content/Views/Articles/Article01.cshtml");
}

我得到了:

视图 '~/Content/Views/Articles/Article01.cshtml' 或其主人是 未找到或没有视图引擎支持搜索的位置。这 搜索了以下位置: ~/Content/Views/Articles/Articles01.cshtml

【问题讨论】:

  • 您的操作将在 URL /Article/bla-bla-article-1 而不是 /Article/Article01
  • 您的第二个错误说视图不存在。如果您的控制器被称为 Article 您正在查看文章s(复数)文件夹,这可能是您的问题
  • 基本上return View("~/Content/Views/Article/Article01.cshtml"); 应该修复它

标签: asp.net-mvc asp.net-mvc-routing


【解决方案1】:

您必须意识到,默认情况下,方法名称也是操作名称。但是,一旦您使用 [ActionName] 属性覆盖了该约定,您访问操作所通过的 Url 也会发生变化。

在你的情况下可能是:

/Articles/bla-bla-article-1

而且,当您使用 return View() 而不指定视图名称时,它会根据当前路由参数自动确定,并且在应用您的属性后,该值将是 bla-bla-article-1

这就是为什么你必须明确指定它:

return View("Article01");

MSDN

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 2010-11-07
    相关资源
    最近更新 更多