我想用布局(_Layout.cshtml)在每个页面上显示一些数据,所以我创建了一个父控制器类,数据库访问在其构造函数中执行。这很好用,除非我想访问会话数据,因为当我尝试检查会话变量是否存在时,会抛出异常(NullReferenceException):
if (Session["UserId"] != null)
System.NullReferenceException:对象引用未设置为对象的实例。
我认为这是因为父类中尚不存在 Session 对象。只有当我将代码复制到所有动作控制器时,我才能找到另一个将会话相关数据传递给布局的解决方案。有任何想法吗?
更新:Dave A,这里是父类:
public class PCMarketController : Controller
{
protected PCMarketContext db = new PCMarketContext();
public PCMarketController()
{
int numberOfCartItems = 0;
if (Session["UserId"] != null) //Throws NullReferenceException in parent, works in action method
{
string UserId = HttpContext.Session["UserId"].ToString();
List<CartItem> CartItems = db.CartItems.Where(i => i.UserId == UserId).ToList();
foreach (var item in CartItems)
{
int count = item.Count;
numberOfCartItems += count;
}
}
ViewBag.NumberOfCartItems = " (" + numberOfCartItems + ")";
List<Category> Categories = db.Categories.ToList();
ViewBag.Categories = Categories;
}
}