【问题标题】:index.html couldn't be found after migrating to MVC 4 [duplicate]迁移到 MVC 4 后找不到 index.html [重复]
【发布时间】:2017-09-19 17:35:57
【问题描述】:

我们有一个 .NET 4.0,MVC 2 项目,其中 HomeController 如下所示:

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View("~/client/index.html");
    }
 }

一切都好。

但是,当我们开始链接到 .NET 4.5 和 MVC 4 时,运行时似乎找不到这个 index.html!我们收到此错误:

未找到视图“~/client/index.html”或其主视图或没有视图 引擎支持搜索的位置。以下位置是 搜索到:~/client/index.html

这怎么可能!我们可能在这里遗漏了什么。

【问题讨论】:

  • 你为什么返回html而不是剃刀视图cshtml
  • View() 需要一个 Razor 视图 (.cshtml) 的路径。如果您不想这样做,则需要返回不同的方法结果,请参阅重复。我猜 MVC 2 在这方面更宽容,但是 MVC 2 根本不支持 Razor。
  • Liam,上面的链接帮助解决了加载 HTML 问题,谢谢!
  • Liam,一个新问题,我的 html 有这样的 href 引用:

标签: c# asp.net-mvc


【解决方案1】:

我从未见过使用直接 html 页面的 MVC。这是一个更典型的设置:

控制器

[HandleError]
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View("Index");
    }
}

视图将是/views/Home/Index.cshtml。默认情况下,MVC 希望视图位于与控制器名称对应的文件夹中的 views 文件夹中。

如果您想将布局拆分为单独的文件,它通常位于/views/Shared/

如果您的 HTML 页面是独立的,您应该能够移动它并将其重命名为 index.cshtml 并在页面的某处添加以下内容。

@{
    Layout = null;
}

【讨论】:

    【解决方案2】:

    查找 html 页面时要小心。将它放在一个视图文件夹中,根据 MVC 规则,控制器应该进行处理,这会导致我的测试出错。这是使其工作的一种方法,尽管这并不是真正的 MVC 模式编码:

    然后您可以引用该页面:

    请注意,我已经超出了控制器/视图结构(不推荐用于 MVC) 为了让它失败,我假设这与你正在发生的事情相似:

    (注意 html 被放置在我们期望匹配的控制器方法将其提供给调用者的视图中)...

    但是……

    因此,如果您坚持采用这种方法,也许您可​​以在 MVC 控制器/视图结构之外设置一个内容文件夹并将您的 html 放在那里。但是,再一次,为了不把对象打死,您可以轻松地将其转换为 cshtml 并通过控制器中的简单方法提供它。只值我的两分钱..

    【讨论】:

    • 您似乎花了很多精力来展示一些不起作用的东西?我不清楚这有什么帮助
    • 马克,感谢您的努力。 Liam 上面指出的链接让我现在加载 html。谢谢利亚姆!
    • Liam,我的帖子的第一部分演示了什么有效,并解释了它为什么有效(不需要控制器),第二部分扩展了早期用户给出的答案(为什么放置一个传统视图结构中的页面然后导致 MVC 期望控制器来处理它)
    猜你喜欢
    • 1970-01-01
    • 2012-12-13
    • 2013-01-15
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 2020-07-12
    相关资源
    最近更新 更多