Asp.net mvc 将会话变量检索到ASP.NET MVC 4(razor,视图)

Asp.net mvc 将会话变量检索到ASP.NET MVC 4(razor,视图),asp.net-mvc,asp.net-mvc-4,session-variables,Asp.net Mvc,Asp.net Mvc 4,Session Variables,我用PHP写了很多网站。现在,我必须用ASP MVC 4(c#)创建网站,我被会话卡住了 即用户应进入登录页面,输入其登录名和密码。如果正确,在controller中,我使用UserId设置会话,如下所示: Session["UserId"] = 10 此UserId值用于显示partialView(登录表单或(登录后)某些应用程序菜单)。如何在Razor视图中获取此用户ID 在此之后,请注意: if (Session.UserId == 10) { @Html.Partial("Logged

我用PHP写了很多网站。现在,我必须用ASP MVC 4(c#)创建网站,我被会话卡住了

即用户应进入登录页面,输入其登录名和密码。如果正确,在controller中,我使用UserId设置会话,如下所示:

Session["UserId"] = 10
此UserId值用于显示partialView(登录表单或(登录后)某些应用程序菜单)。如何在Razor视图中获取此用户ID

在此之后,请注意:

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

我遇到了StackOverflow的异常情况:/

你做错了

Session[]
返回一个字符串,您也应该将其与字符串进行比较或强制转换,因此,
(int)Session[“UserId”]==10
Session[“UserId”]=“10”

您还调用了一个不存在的属性
Session.UserId
将不存在,因为
Session
类似于NameValueCollection,您可以通过请求将其称为项目名称

最后,你应该写

@if (Session["UserId"] == "10") { 
    Html.Partial("LoggedMenu"); 
}
你说你在学习,所以我想指出两件事:

  • 您应该利用ASP.NET MVC课程,该课程在主页上免费提供(阅读“基本视频”时,请参见右侧)
  • 创建一个MVC3项目,看看他们是如何做的,因为它是现成的,有成员资格
除此之外:为了更好地进行身份管理,请使用现成的

以下是一个示例:

控制器:

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

Javascript:

alert($("#pageInitCounter").val());

您可以添加一个ASP或类似的标签吗?在这种情况下,您不应该使用会话。用户ID应该是控制器返回到视图的模型的一部分(或者如果不是模型的一部分,您可以使用ViewBag)。会话是邪恶的,特别是如果您使用云托管。。。注意!您会遇到什么异常?您是否尝试在视图中使用与控制器中相同的会话语法?我相信
Session[]
返回的对象不是字符串。它可以工作,但为什么“@Html.Hidden”(“pageInitCounter”,Session[“pageInitCounter”]),我们可以直接在alert中调用会话?alert()是客户端javascript。您需要将asp服务器变量写入页面,以便javascript能够引用它。跳蚤通过调用@Html.Hidden助手来实现这一点。
@Html.Hidden("pageInitCounter", Session["pageInitCounter"])
alert($("#pageInitCounter").val());