【问题标题】:How to use NHaml in Asp.net MVC 6 (template not found error)如何在 Asp.net MVC 6 中使用 NHaml(找不到模板错误)
【发布时间】:2015-06-21 14:29:23
【问题描述】:

首先我要说的是,我对 Asp.net 的经验非常少,这就是为什么这个问题在某些地方可能会让人感到困惑。 我首先通过yo aspnet 创建了https://code.visualstudio.com/Docs/ASPnet5 一个MVC6 项目。然后我将此行添加到 project.json 中的“依赖项”

"Microsoft.Framework.ConfigurationModel.Xml": "1.0.0-beta4",
"System.Web.NHaml.Mvc3": "4.0.8",

然后我使用this Google code content 创建了haml.xml,并在Startup.cs 文件中扩展了以下行:

var configuration = new Configuration()
            .AddJsonFile("config.json")
            .AddXmlFile("haml.xml")
            .AddJsonFile($"config.{env.EnvironmentName}.json", optional: true);

这是我的控制器的样子:

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View(@"~/Views/Shared/Test.haml");
    }
}

应用程序启动,但我无法呈现动作,这是浏览器中显示的错误

处理请求时发生未处理的异常。

InvalidOperationException:视图 '~/Views/Shared/Test.haml' 不是 成立。搜索了以下位置: ~/Views/Shared/Test.haml。 Microsoft.AspNet.Mvc.Rendering.ViewEngineResult.EnsureSuccessful() [0x00000] 在第 0 行

但是这个文件确实存在于这个目录中。任何提示或帮助表示赞赏。


赏金编辑:

基本上,我想要的是一个非常简单的 MVC 5 或 6 项目的详细解释或工作示例,该项目使用 NHaml 或任何其他提供 Haml 语法的库(如果它与 osx 上的 Mono 一起使用,那是一个奖励)。坦克很多!

【问题讨论】:

  • 它是 mvc 4,我按照说明进行操作但无法做到,因为我不知道 mvc 5 或 6 中的 ViewEngines.Engines 的位置和方式。
  • NHaml wiki 链接来自 2009 年。我们谈论的是 MVC 框架的古老版本。首先撤消那里应用的所有内容。
  • NHaml View Engine 的最后一版发布于 2013 年 1 月。一直以来的下载量都低于 500。 nuget.org/packages/System.Web.NHaml.Mvc3 View Engine 从未流行起来,Razor 是主要使用。 MVC 6 已配置为使用您想要的任何 View Engine,但 99% 的可能性是第一个尝试使用 MVC 6 的人。由于 Asp.Net 5 仍然是 RC,我怀疑 Microsoft 是否添加了对此的支持。你必须自己实现它。

标签: c# asp.net asp.net-mvc mono asp.net-core-mvc


【解决方案1】:

我想说的是,Haml 不支持 MVC5 和 MVC 6

因为 Haml 视图引擎项目可能是discontinued。最后一次提交出现在 2013 年 2 月 25 日。此外,HAML 视图引擎问题今天也没有解决itself。Haml 视图引擎的最后一次发布是在 2013 年 2 月 nuget。所以这不是感觉。

所以你改用Spark View engine它也支持Mono..

spark 还支持受框架启发的“左偏移”语法 喜欢 Jade 和 Haml

项目文档是here

您还可以从Nuget 安装二进制文件

spark 还为配置视图引擎提供示例。

祝你好运……

编码愉快。

【讨论】:

    【解决方案2】:

    我认为是 Razor 视图引擎引发了该错误。

    在使用 asp.net 5 MVC6 获得 NHaml 视图引擎时,我无法让它工作,因为它需要我重写它以从 IViewEngine 继承。如果您尝试使用启用调试器的 Visual Studio 代码编辑器,我认为您应该收到此错误。你可以试试 Visual Studio 2013 Community 或 VS 2015 试用版看看你是否得到以下错误?

    这是您当前的 ViewEngine 现在出现故障的地方,给人一种丢失文件的印象。 Source code for OP provided error message 把haml文件改成cshtml文件能用吗?

    【讨论】:

    • 嘿,是的,如果我将 haml 更改为 cshtml,它会起作用,但是我必须使用 razor 语法。我也尝试通过代码添加 ViewEngie,但我陷入了这个异常。你知道如何解决 ArgmentException 吗?
    • @antpaw 解决它的唯一方法是使用旧版本的 asp.net mvc 或重写 NHaml。这是 Github 上 NHaml 存储库的链接。 github.com/NHaml/NHaml/tree/master/src/System.Web.NHaml你必须重写它来继承IViewEngine。
    • @antpaw 顺便说一句,我曾经做过 Ruby 的工作,我认为你不会对使用 Razor 感到失望。没有人使备用视图引擎保持最新是有原因的。祝你好运!
    • @antpaw 我是否不清楚 NHaml 不支持 MVC5 或 6?我想我应该得到这个问题的正确答案。
    【解决方案3】:

    还有另一种选择,但适用于 ASP.NET Core。见下文来自 github 站点https://github.com/AspNetMonsters/pugzor

    Pugor 是 ASP.NET Core 的 Pug 视图引擎。你可能知道哈巴狗的旧名 Jade。你可以在他们的网站上阅读更多关于 Pug 的信息:https://pugjs.org/api/getting-started.html

    Pugzor 的工作原理是通过 Steve Sanderson 出色的 JavaScript 服务将您的模型直接传递给 pug 的节点版本。它实际上性能非常好,还有许多优化需要做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      相关资源
      最近更新 更多