我在 asp.net MVC 中进行会话处理它在查看页面按钮上工作我无法在我的控制器中的另一个操作上获得会话 [重复]

Posted

技术标签:

【中文标题】我在 asp.net MVC 中进行会话处理它在查看页面按钮上工作我无法在我的控制器中的另一个操作上获得会话 [重复]【英文标题】:I was doing session handling in asp.net MVC it works on view page button i was unable to get session on another action in my controller [duplicate] 【发布时间】:2021-09-09 08:39:05 【问题描述】:

我从这个控制器的数据库中获取数据,然后我将用户名存储到一个会话中,当我在登录后移动到视图页面时它可以工作。

public ActionResult shoppage(assign s)


    if (ModelState.IsValid)
    
        using (transactionEntities db = new transactionEntities())
        
            var obj = db.assigns.Where(a => a.Username.Equals(s.Username) && a.Password.Equals(s.Password)).FirstOrDefault();
            if (obj != null)
            
                Session["Username"] = s.Username.ToString();

                return View();
            
            else
            
                return RedirectToAction("login");
            
        

但是当我尝试在另一个操作结果中访问它时,它给了我一个空值异常

public ActionResult insertwatch()

    if (Session["Username"] != null)
    
        name = Session["Username"].ToString();
    

    if (Request.Form["submit1"] != null)
    
        transactionEntities dt = new transactionEntities();
        itemthing it = new itemthing();
        it.uname = name.ToString();
        it.itemprice = "1200";
        it.itemname = "lucia";
        dt.itemthings.Add(it);
        return RedirectToAction("shoppage");
    
    else if (Request.Form["submit2"] != null)
    
        transactionEntities dt = new transactionEntities();
        itemthing it = new itemthing();
        it.uname = name.ToString();
        it.itemprice = "1800";
        it.itemname = "Benson";
        dt.itemthings.Add(it);
        return RedirectToAction("shoppage");
    

错误:

【问题讨论】:

这能回答你的问题吗? What is a NullReferenceException, and how do I fix it? 我无法理解您的问题。您是否尝试为已分配的会话变量分配新值? 【参考方案1】:

您可能需要添加一个空检查属性:-

 public ActionResult shoppage(assign s)
    

        if (ModelState.IsValid)
        
            using (transactionEntities db = new transactionEntities())
            
                var obj = db.assigns.Where(a => a.Username.Equals(s.Username) && a.Password.Equals(s.Password)).FirstOrDefault();
                if (obj != null)
                
                     if (HttpContext.Current.Session["Username"] == null)  //add this code
                          return string.Empty;
                    else
                        //Session["Username"] = s.Username.ToString();
                        HttpContext.Current.Session["Username"] = s.Username.ToString();

                    return View();
                
                else
                
                    return RedirectToAction("login");
                
            

或者你可以简单地使用这行代码:-


//clarify code

if (Session["Username"]!=null)

   Session["Username"] = s.Username.ToString();
   return View();


//clarify code

或者你可以使用类似设置会话的东西并获取会话的存储值:-

设置会话

string user = s.Username.ToString();   
HttpContext.Session.SetString("UserToken", user);

从会话中获取存储的值:-

var token = HttpContext.Session.GetString("UserToken");

我认为它会解决您的问题。

【讨论】:

if (Session["Username"]!=null) Session["Username"] = s.Username.ToString();返回视图();我已经在我的项目中使用了它,但它不起作用 @yaseen 使用第一个进程。

以上是关于我在 asp.net MVC 中进行会话处理它在查看页面按钮上工作我无法在我的控制器中的另一个操作上获得会话 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 在 ASP.NET Core 3.1 MVC 中使用会话变量

如何在 ASP.NET MVC 中进行长轮询 AJAX 请求? [复制]

ASP.NET MVC、NHibernate 会话和 NHibernate 事件

与 windows 服务共享 asp.net mvc 会话

使用 WIF 和 jquery ajax 请求时 ASP.NET MVC 3 中的会话 Cookie 过期处理

ASP/NET MVC:带会话的测试控制器?嘲讽?