使用 SQL 服务器会话状态保存后会话值为 NULL
Session Value is NULL after saving it using SQL Server Session State
我最近将我的应用程序转换为使用会话状态“SQL 服务器”而不是“InProc”,因为我必须对第三方应用程序进行一些重定向。一切正常,我可以轻松设置和检索会话值。当我尝试从不同的控制器方法再次访问会话时出现问题
结构是这样的:
添加公司方法
public String AddNewCompany()
{
SalesInvoiceSettingController invoiceSetting = new SalesInvoiceSettingController();
string Uname = Session["UserName"].ToString(); // This session value is picked correctly
invoiceSetting.SaveInvoiceSettings(); // This is another method which I am calling inside this method, by creating an object of 'SalesInvoiceSettingController'
SaveInvoiceSettings 方法
public string SaveInvoiceSettings()
{
string Uname = Session["UserName"].ToString(); <-- This is where I get a NULL POINTER EXCEPTION i.e Object Reference not set to an instance of an object.
不确定我做错了什么?它可以从一个控制器的方法访问,但不能从不同控制器的方法访问。谁能帮我解决这个问题?
好的,我终于找到了发生这种情况的原因。基本上根据框架,当您创建一个 Instance 时,它并没有真正完全初始化它(即没有会话、请求等)被初始化,但实际上是 'Injected' 稍后在流程生命周期中。为了解决这个问题,我们需要手动初始化它。解决方案如下:
考虑两个控制器:
- 控制器A(创建'Controller B'实例的控制器)。
- 控制器 B
首先,您需要像这样在控制器 B 中创建一个初始化方法:
控制器 B
Public class ControllerB : Controller
{
public void InitializeController(RequestContext requestContext)
{
base.Initialize(requestContext);
}
}
现在,在控制器 A 中创建控制器 B 的实例并调用此方法:
控制器A
Public Class ControllerA : Controller
{
ControllerB obj1 = new ControllerB();
obj1.InitializeController.InitializeController(this.Request.RequestContext);
}
你很高兴去。您将拥有所有会话的完全访问权限。
感谢 nikki9696 为我指明了正确的方向。
我最近将我的应用程序转换为使用会话状态“SQL 服务器”而不是“InProc”,因为我必须对第三方应用程序进行一些重定向。一切正常,我可以轻松设置和检索会话值。当我尝试从不同的控制器方法再次访问会话时出现问题
结构是这样的:
添加公司方法
public String AddNewCompany()
{
SalesInvoiceSettingController invoiceSetting = new SalesInvoiceSettingController();
string Uname = Session["UserName"].ToString(); // This session value is picked correctly
invoiceSetting.SaveInvoiceSettings(); // This is another method which I am calling inside this method, by creating an object of 'SalesInvoiceSettingController'
SaveInvoiceSettings 方法
public string SaveInvoiceSettings()
{
string Uname = Session["UserName"].ToString(); <-- This is where I get a NULL POINTER EXCEPTION i.e Object Reference not set to an instance of an object.
不确定我做错了什么?它可以从一个控制器的方法访问,但不能从不同控制器的方法访问。谁能帮我解决这个问题?
好的,我终于找到了发生这种情况的原因。基本上根据框架,当您创建一个 Instance 时,它并没有真正完全初始化它(即没有会话、请求等)被初始化,但实际上是 'Injected' 稍后在流程生命周期中。为了解决这个问题,我们需要手动初始化它。解决方案如下:
考虑两个控制器:
- 控制器A(创建'Controller B'实例的控制器)。
- 控制器 B
首先,您需要像这样在控制器 B 中创建一个初始化方法:
控制器 B
Public class ControllerB : Controller
{
public void InitializeController(RequestContext requestContext)
{
base.Initialize(requestContext);
}
}
现在,在控制器 A 中创建控制器 B 的实例并调用此方法:
控制器A
Public Class ControllerA : Controller
{
ControllerB obj1 = new ControllerB();
obj1.InitializeController.InitializeController(this.Request.RequestContext);
}
你很高兴去。您将拥有所有会话的完全访问权限。 感谢 nikki9696 为我指明了正确的方向。