ASP.NET Core Identity注册页绑定多表下拉框遇空引用问题求助
解决ASP.NET Core Identity注册页面下拉框空引用异常问题
1. 核心问题:未给PageModel的Input属性赋值
你的LoadInputModel方法里新建了InputModel对象,但没有将它赋值给页面模型(RegisterModel)的Input属性。页面中使用@Model.Input.CategoryList时,Model.Input为null,直接触发空引用异常。
修改LoadInputModel方法:
private Task LoadInputModel() { // 直接初始化或赋值给PageModel的Input属性 Input = new InputModel() { CompanyList = _unitOfWork.Company.GetAll().Select(i => new SelectListItem() { Text= i.Name, Value = i.Id.ToString() }).ToList(), // 转为List避免延迟加载问题 DepartmentList = _unitOfWork.Department.GetAll().Select(i => new SelectListItem() { Text= i.Name, Value = i.Id.ToString() }).ToList(), DesignationList = _unitOfWork.Designation.GetAll().Select(i => new SelectListItem() { Text= i.Name, Value = i.Id.ToString() }).ToList(), RankList = _unitOfWork.Rank.GetAll().Select(i => new SelectListItem() { Text= i.Name, Value = i.Id.ToString() }).ToList(), CategoryList = _unitOfWork.Category.GetAll().Select(i => new SelectListItem() { Text= i.Name, Value = i.Id.ToString() }).ToList() }; return Task.CompletedTask; }
2. 确认UnitOfWork已正确注入
检查RegisterModel的构造函数,确保_unitOfWork已通过依赖注入获取实例,没有为null:
private readonly IUnitOfWork _unitOfWork; private readonly SignInManager<IdentityUser> _signInManager; // 其他依赖... public RegisterModel(SignInManager<IdentityUser> signInManager, IUnitOfWork unitOfWork, // 其他服务...) { _signInManager = signInManager; _unitOfWork = unitOfWork; // 初始化其他依赖 }
同时确保在Program.cs中已注册UnitOfWork服务:
builder.Services.AddScoped<IUnitOfWork, UnitOfWork>();
3. 处理潜在的延迟加载问题
将Select后的结果调用.ToList(),把IQueryable转为List,避免页面渲染时EF上下文已释放导致的异常(如果你的GetAll()返回的是IQueryable)。
4. 可选:空值保护
在InputModel的集合属性初始化时,设置默认空集合,避免后续意外空引用:
public IEnumerable<SelectListItem> CompanyList { get; set; } = new List<SelectListItem>(); public IEnumerable<SelectListItem> DepartmentList { get; set; } = new List<SelectListItem>(); // 其他集合属性同理
内容的提问来源于stack exchange,提问作者rehman mustafa
相关产品推荐
相关产品推荐

