Nancy Self使用Razor视图主持空白响应

时间:2011-07-14 23:04:57

标签: c# razor nancy

在Nancy 0.6中解决


我正试图让自己主持的Nancy返回一个剃刀视图而我无法让它工作。 Nancy源代码中的示例使用Web项目,但page they have并未说明这是必需的。我已经尝试指定配置部分,但他们又说“这一步是完全可选的”(斜体是他们的)。通过源跟踪它看起来不像razor是一个有效的视图引擎,但我没有看到我可以在配置或我自己的NancyModule中添加它...任何帮助将不胜感激。

View Engines

当我终于发现他们正在查看views文件夹时,似乎cshtml是受支持的扩展,但是DefaultViewFactory没有它与视图引擎关联,所以我得到null:

enter image description here

我的代码:

public Module1()
{
    Get["/me"] = parms =>
    {
        return View["Static.html"]; // WORKS!
    };
    Get["/you"] = parms =>
    {
        dynamic model = new ExpandoObject();
        //return View["~/Static.cshtml", model];
        //return View["/Static.cshtml", model];
        return View["Static.cshtml", model]; // blank page, no error or anything
    };
}

Static.cshtml只是一个html页面,上面写着“Hello,world!”

3 个答案:

答案 0 :(得分:10)

console,form和wpf项目将视图文件定位在与可执行文件相同的位置。这意味着您必须将view.cshtml文件复制到项目bin \ debug文件夹以在调试模式下工作 所以:将.cshtml文件标记为复制到输出

答案 1 :(得分:3)

我想出了我的问题的一部分,当我创建NancyHost时,剃刀程序集未加载到我的AppDomain中。 NancyHost有TinyIoc扫描并在启动时创建所有已加载程序集中所有类的列表,并且此列表永远不会被更新。我通过创建RazorViewEngine来强制组件加载来修复它。使用Register()调用也可以,但我认为只是因为它强制加载程序集,我认为Nancy有自己的容器。所有这些位置都有效,但如果我把它放在我的NancyModule中它仍然无效:

//TinyIoC.TinyIoCContainer.Current.Register<RazorViewEngine>(); // WORKS
//RazorViewEngine rve = new RazorViewEngine(); // WORKS
m_Host = new NancyHost(m_Uri);
//TinyIoC.TinyIoCContainer.Current.Register<RazorViewEngine>(); // WORKS
m_Host.Start();
TinyIoC.TinyIoCContainer.Current.Register<RazorViewEngine>(); // WORKS

如果有人想重写这个答案并找出更清洁的方法或更好的解决方案,我会接受答案。

答案 2 :(得分:1)

我和nancy 0.8.0和Razor有类似的问题。我有Nancy,Host.Self和ViewEngine.Razor下载并安装和引用。

仍然在编译编译器时无法在Nancy.ViewEngines.Razor中找到Razor命名空间(事件虽然对象浏览器和Reflector显示命名空间和类型非常好),但我做了所有正常的命名空间引用vodo;清理,删除,添加,下午卸载,下午安装,手动将dll移动到垃圾箱,戴上我的幸运编译帽子,在我的左肩上吐三次,但仍然得到相同的结果。没有Razor加载到AppDomain ...

我恢复了将程序集手动加载到appdomain并使用activator为Tiny.IoC容器工厂创建RazorViewEngine类型的实例。

实际问题是我的解决方案的启动项目是针对.NET Framework 4客户端配置文件的。显然,客户端.Net软件包无法使用和查看为完整4版本编译的dll的某些部分。

反正。将我的构建更改为“正常”.NET 4,一切都恢复正常。编译器在命名空间中找到类型,Tiny.IoC能够连接所有内容。