【问题标题】:Confusing Result with @Session["something_here"] (C#/Razor)混淆结果与@Session["something_here"] (C#/Razor)
【发布时间】:2011-06-06 03:57:11
【问题描述】:

我在一个基本网页中测试了一些东西,我注意到一些非常奇怪的东西。我不确定这种行为是否可以预期,但它确实让我想知道......

我知道我可以获取当前登录的人的当前用户 ID,如下所示:

@WebSecurity.CurrentUserId

为了看看如何使用 Sessions,我想我只是在用户登录后将 CurrentUserId 存储(作为示例)在 Session 变量中,如下所示:

@Session["UserIDthing"] = @WebSecurity.CurrentUserId;

然后在另一个页面上,我只输出会话 id(应该完全等于 1,因为这就是我的 UserId),如下所示:

@Session["UserIDthing"]

但是,它不是输出“1”,而是输出负1“-1”。为什么会这样?

为了确保我对用户 ID 的看法是正确的,我使用以下方式输出了用户 ID:

@WebSecurity.CurrentUserId

它显示了正确的 ID,即“1”

【问题讨论】:

    标签: c# asp.net session razor webmatrix


    【解决方案1】:

    它可能与Session 无关。尝试以其他方式存储@WebSecurity.CurrentUserId,以确保在用户登录后实际设置了CurrentUserId(可能通过将其记录到文件或使用静态变量进行测试)。

    【讨论】:

    • 谢谢!我不是在他们登录后立即将其存储在 Session 中,而是在他们登录后被重定向到 Account 页面时将其存储在 Session 中。所以你是对的,它没有被设置为时间。谢谢 :) @Eben R.
    【解决方案2】:

    要分配变量,您需要一个代码块,而不是输出块。你应该使用:

    @{ someVar = otherVar; }
    

    你使用的语法:

    @someVar = @otherVar;
    

    翻译为(伪代码):

    Response.Write(HtmlEncode(someVar));
    Response.Write(" = ");
    Response.Write(HtmlEncode(otherVar));
    Response.Write(";");
    

    顺便说一句:为什么要在视图中分配会话变量。这应该是控制器的责任。

    【讨论】:

    • 网页中没有视图和控制器之类的东西。
    • @Mike,我明白了,它的 WebMatrix。我试图忘记这样的架构。
    • 无知会让你一事无成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 2019-10-24
    • 2011-10-17
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多