我正在尝试访问ServiceStack Razor View(Partial)中的会话。在这种情况下,我只是想渲染会话中存在的菜单。
@(new HtmlString(this.SessionAs<CustomUserSession>().MenuHtmlString))
我收到此错误:
回应状态
错误代码 的NullReferenceException 信息 你调用的对象是空的。 堆栈跟踪 [BOPBasicInfo1VM:1/31/2014 9:46:45 PM]:[请求:{QuoteNumber:1,AgencyId:0,错误:[],IsValid:False}] System.NullReferenceException:未将对象引用设置为实例 一个对象。在ASP ._ BOPBasicInfo1VM.Execute()at ServiceStack.Razor.ViewPage
1.WriteTo(StreamWriter writer) at ServiceStack.Razor.Managers.RazorPageResolver.ExecuteRazorPageWithLayout(IRequest httpReq, IResponse httpRes, Object model, IRazorView page, Func
1 布局) ServiceStack.Razor.Managers.RazorPageResolver.ResolveAndExecuteRazorPage(IRequest httpReq,IResponse httpRes,对象模型,RazorPage razorPage) ServiceStack.Razor.Managers.RazorPageResolver.ProcessRequest(IRequest httpReq,IResponse httpRes,Object dto)at 。ServiceStack.Formats.HtmlFormat&LT;&以及c _DisplayClass2.b__0(IViewEngine x)at System.Linq.Enumerable.Any [TSource](IEnumerable1 source, Func
2 谓词) ServiceStack.Formats.HtmlFormat.SerializeToStream(IRequest请求, 对象响应,IResponse httpRes)
我是否正确尝试访问会话?关于为什么失败的任何想法?
据我所知,SS Razor Views中没有断点/调试支持,最新版本是否为v4.0.8.0 +?
答案 0 :(得分:1)
问题原来是
@(new HtmlString())
而不是
this.SessionAs<CustomUserSession>().MenuHtmlString
我想出来的方法是在类上创建一个静态方法并将“this”传递给它,以便我可以调试。
public static HtmlString GetMenu(ServiceStack.Razor.ViewPage page)
{
return new HtmlString(page.SessionAs<FMIC.DTOs.Entities.CustomUserSession>().MenuHtmlString);
}
从视图中这样称呼它。
@(ViewPageExtensions.GetMenu(this))
我还将从ServiceStack论坛中添加来自Demis(mythz)的评论
为了帮助调试,我将从Razor视图中调用您自己的方法 所以你可以放一个断点并检查传入的值。
您还应该能够使用以下方法调试v4.09源代码 使用NuGet发布的源符号,一些说明: https://github.com/ServiceStack/ServiceStack/wiki/Debugging#wiki-debugging-source-symbols-in-nuget-packages