如何在NancyFx中调试视图错误?

时间:2015-05-06 13:49:08

标签: c# razor nancy

我有一个项目,我将ASP.Net MVC中的一些代码移植到Nancy上。我继续在新项目中使用Razor作为视图引擎。我的一个观点是给了我以下例外:

RuntimeBinderException: Cannot perform runtime binding on a null reference
at CallSite.Target(Closure , CallSite , Object )
at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
at RazorOutput.RazorView.Execute()
at Nancy.ViewEngines.Razor.NancyRazorViewBase`1.ExecuteView(String body, IDictionary`2 sectionContents)
at CallSite.Target(Closure , CallSite , Object , Object , Object )
at System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid3[T0,T1,T2](CallSite site, T0 arg0, T1 arg1, T2 arg2)
at CallSite.Target(Closure , CallSite , Object , Object , Object )
at Nancy.ViewEngines.Razor.RazorViewEngine.<>c__DisplayClass27.<RenderView>b__26(Stream stream)
at Nancy.ViewEngines.Razor.HtmlHelpers`1.Partial(String viewName, Object modelForPartial)
at RazorOutput.RazorView.Execute()
at Nancy.ViewEngines.Razor.NancyRazorViewBase`1.ExecuteView(String body, IDictionary`2 sectionContents)
at CallSite.Target(Closure , CallSite , Object , Object , Object )
at System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid3[T0,T1,T2](CallSite site, T0 arg0, T1 arg1, T2 arg2)
at Nancy.ViewEngines.Razor.RazorViewEngine.<>c__DisplayClass27.<RenderView>b__26(Stream stream)
at Nancy.Responses.MaterialisingResponse.PreExecute(NancyContext context)

现在,从某种意义上讲,这是一个很容易修复的错误:只是防止null被引用,对吧?我遇到的问题是我不知道我的模型的哪些部分并且认为它存在问题。所以我要问的是,是否有办法从南希那里得到更好的错误信息?如果我可以让它告诉我视图中的行号,或者它无法绑定的空对象的名称,那将使调试变得更加容易。

1 个答案:

答案 0 :(得分:0)

我希望这比RazorEngine更好,但我看到NancyFx也有同样的弱点。真的很失望,看到2017年仍然是一个普通的Razor Thing ......

我的黑客是为源文件名和行号添加属性,并添加代码以手动更新它们。非常难看,数字不是对实际行号的引用,而是文件中的唯一标识符,但它确实为您提供了更多的本地化信息。

@{ Model.LineNumber = "62"; } <div>@Model.Example</div>

我很想知道是否有人在任何可以在HttpContext之外运行的Razor解决方案中找到了更好的解决方案。