【发布时间】:2021-04-09 17:34:52
【问题描述】:
我最近将我的应用程序转换为使用会话状态“SQL Sever”而不是“InProc”,因为我必须重定向到第三方应用程序。一切正常,我可以轻松设置和检索会话值。当我尝试从不同的 Controller 方法再次访问 Session 时出现问题
这是它的结构:
添加公司方法
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.
不确定我在这里做错了什么?它可以从一个控制器的方法访问,但不能从另一个控制器的方法访问。谁能帮我解决这个问题?
【问题讨论】:
-
您要在另一个控制器中创建一个控制器实例?为什么?更好的设计是让他们共享一个业务层对象。我不确定这是否是原因,但是你更新一个控制器会在生命周期中做不同的事情,而不是框架做的事情?
-
我可以理解这里的设计缺陷。我无法理解的是,为什么会出现这个问题?会不会是实例导致了问题?
-
可能。我不确定您是如何实例化控制器的,但是会话状态可能由框架处理并在创建控制器时的某个时候注入,但不是在您这样做时注入,因为您没有传递上下文它来自哪里。
-
啊,这看起来很有趣。 stackoverflow.com/questions/889516/… 或许你可以设置 httpcontext 并通过这种方式传递会话
-
@Nikki9696... 你是救生员。这帮助很大。我也在下面发布了答案。 :)
标签: c# sql-server session-state