【问题标题】:In MVC assigning value to session giving Object reference not set to an instance of an object exception在 MVC 中,将值分配给会话,将对象引用未设置为对象异常的实例
【发布时间】:2014-05-15 03:55:00
【问题描述】:

问题陈述:

通过 WCF 服务对登录凭据进行身份验证。基于登录 ID 身份验证,在另一个控制器中调用用于将客户 ID 分配给会话的方法给出空引用异常。我做错了什么?

WCF 服务代码:

在这里,我可以根据登录 ID 验证用户并获取客户详细信息。

public bool IsValid(LoginDC objLoginDC)
{
    try
    {
        var result = dbEntity.CustomerUsers.FirstOrDefault(m => m.LoginID == objLoginDC.LoginID && m.Password == objLoginDC.Password);
        
        if (result != null)
        {
            return true;
        }
        else
        {
            return false;
        }

    }
    catch
    {
        return false;
    }
}

public IEnumerable<CustomerUserDC> GetLoginCustomerUserDetails(LoginDC objLoginDC)
{

    return (from tu in dbEntity.CustomerUsers.AsEnumerable()
            where tu.LoginID == objLoginDC.LoginID && tu.Password == objLoginDC.Password
            select new CustomerUserDC
            {
               CustomerID = tu.CustomerID,
                UserID = tu.UserID,
                Name = tu.Name

            }).ToList();

}

登录控制器:

我在这里调用登录验证并获取 WCF 的客户详细信息方法。我能够从 WCF 获取值,但我无法将值分配给会话。

public ActionResult Index(LoginModel loginModel, string returnUrl)
{
    if (ModelState.IsValid)
    {
        objLoginDC.LoginID = loginModel.LoginID;
        objLoginDC.Password = loginModel.Password;
        if (objSvcMasterConfig.IsValid(objLoginDC))
        {
            var varLoginCustomerUserDetails=objSvcMasterConfig.GetLoginCustomerUserDetails(objLoginDC);
            objGenController.GlobalSessionCustomerUserDetails(varLoginCustomerUserDetails);
            FormsAuthentication.SetAuthCookie(objLoginDC.LoginID, objLoginDC.RememberMe);
            return RedirectToAction("Index", "Home");
        }
        else
        {
            ModelState.AddModelError("", "The Log In ID or Password provided is incorrect.");
        }
    }

    return View(loginModel);
}

一般控制人:

这里我无法分配从登录控制器中的 WCF 服务获取的值,将对象引用未设置为通用控制器中的对象异常的实例。

public void GlobalSessionCustomerUserDetails(dynamic varLoginCustomerUserDetails)
{
    Session["TempCustDetails"] = varLoginCustomerUserDetails[0].LoginID;
}

【问题讨论】:

  • 对我来说,varLoginCustomerUserDetails 似乎是 null 或一个空列表。
  • @DZL-否,varLoginCustomerUserDetails 有价值。我已在即时窗口中签入。离开varLoginCustomerUserDetails,即使我分配任何字符串(例如:Session [“TempCustDetails”] =“Hi”)它也会显示相同的错误。没有任何值被分配给会话,为什么??
  • 你在哪里声明objLoginDC 在你的登录控制器中?那可能是空的吗?
  • @DStanley-No,varLoginCustomerUserDetails[0].LoginID 具有价值。我已在即时窗口中检查。离开varLoginCustomerUserDetails,即使我分配任何字符串(例如:Session [“TempCustDetails”] =“Hi”)它也会显示相同的错误。没有任何值被分配给会话,为什么??

标签: c# asp.net .net asp.net-mvc wcf


【解决方案1】:

尝试将返回类型更改为 List... 公共列表 GetLoginCustomerUserDetails(LoginDC objLoginDC)

【讨论】:

  • 为什么我要把 var(dynamic) 改为 list ???离开将返回类型更改为 listvarLoginCustomerUserDetails,即使我分配任何字符串(例如:Session["TempCustDetails"]="Hi")它也会显示相同的错误。没有任何值被分配给会话,为什么??
  • 如果我没有明确提到......我说的是“返回类型”(IEnumerable 到 List),而不是“参数”(动态到 List)。
猜你喜欢
  • 2014-06-30
  • 1970-01-01
  • 1970-01-01
  • 2012-08-04
  • 1970-01-01
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多