8

I wrote many websites with PHP. Now, I have to create website with ASP MVC 4 (c#) and I am stuck with Sessions.

I.E. the user should go to login page, enter his/her login and password. If they are correct, in controller, I set the session with UserId, like this:

Session["UserId"] = 10

This UserId value is used for showing PartialViews (login form or (after login) some application menus). How can I get this UserId inside Razor view ?

After this in View:

if (Session.UserId == 10) { @Html.Partial("LoggedMenu") }

i've got exception with StackOverflow. :/

4

3 回答 3

14

你这样做是错的...

Session[<item name>]返回一个字符串,您也应该与一个字符串进行比较,或者强制转换它,所以,要么(int)Session["UserId"] == 10要么Session["UserId"] = "10".

您还调用了一个不存在的属性,Session.UserId就像SessionNameValueCollection 一样,您通过请求它的项目名称来调用它。

最后,你应该写

@if (Session["UserId"] == "10") { 
    Html.Partial("LoggedMenu"); 
}

你说你正在学习,所以我想指出两件事:

  • 您应该利用主页http://asp.net/mvc中免费提供的 ASP.NET MVC 课程(阅读“基本视频”时的右侧)
  • 创建一个 MVC3 项目,看看他们是如何使用 Membership 开箱即用的
于 2013-06-08T23:14:04.693 回答
2
@if (Session["UserId"] != null && Session["UserId"] == 10 ) { 
Html.Partial("LoggedMenu"); 
}

除此之外:对于身份管理,最好使用开箱即用的会员系统

于 2013-06-08T23:18:39.637 回答
1

下面是一个例子:

控制器:

    if (Session["pageInitCounter"] == null)
    {
        Session["pageInitCounter"] = 1;
    }
    else
    {
        int counter = Convert.ToInt32(Session["pageInitCounter"]);
        counter++;
        Session["pageInitCounter"] = counter;
    }

看法:

@Html.Hidden("pageInitCounter", Session["pageInitCounter"])

Javascript:

alert($("#pageInitCounter").val());
于 2015-10-28T14:50:46.127 回答