我正试图让自己主持的南希回归剃刀观点,我无法让它发挥作用.南希源代码中的示例使用Web项目,但他们所拥有的页面并未说明这是必需的.我已经尝试指定配置部分,但他们又说" 这一步是完全可选的 "(斜体是他们的).通过源跟踪它看起来不像razor是一个有效的视图引擎,但我没有看到我可以在配置或我自己的NancyModule中添加它...任何帮助将不胜感激.
当我最终发现他们正在查看views文件夹时,似乎cshtml是受支持的扩展,但是DefaultViewFactory没有它与视图引擎关联,所以我得到null:
我的代码:
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
};
}
Run Code Online (Sandbox Code Playgroud)
Static.cshtml只是一个html页面,上面写着"Hello,world!"
Sal*_*nAA 10
console,form和wpf项目将视图文件定位在与可执行文件相同的位置.这意味着您必须将view.cshtml文件复制到项目bin\debug文件夹以在调试模式下工作.
所以:将.cshtml文件标记为复制到输出
我解决了问题的一部分,当我创建 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
Run Code Online (Sandbox Code Playgroud)
如果有人想重写这个答案并找出更干净的方法或更好的解决方案,我会接受答案。
归档时间: |
|
查看次数: |
4179 次 |
最近记录: |