在ServiceStack Razor视图中访问会话

时间:2014-01-31 21:56:01

标签: session razor servicestack

我正在尝试访问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](IEnumerable 1 source, Func 2   谓词)   ServiceStack.Formats.HtmlFormat.SerializeToStream(IRequest请求,   对象响应,IResponse httpRes)

我是否正确尝试访问会话?关于为什么失败的任何想法?

据我所知,SS Razor Views中没有断点/调试支持,最新版本是否为v4.0.8.0 +?

1 个答案:

答案 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