[英]C# RazorPages EF6, Null reference, Dereference of a possibly null reference
忘記提及這是在ASP.net.Core entityframework 6環境中完成的。 帶有剃刀頁面
我有一個 foreach 循環。 這會循環我所有的停車位 (45)(已播種)。 parking Spot 模型與“spaceShip”具有一對一的關系,我將我的汽車稱為“spaceship”,因為它用於一個案例。 SpaceshipModel 是 ParkingLotModel 和 ApplicationUsers 之間交互的關鍵。
ParkingSpotModel 不保存 ParkingSpot.spaceship,只保存變量,例如 SpaceShipID。 ParkingSpot.Spaceship 將始終為空,但是,如果宇宙飛船停在 parkingSpot 處,則 spaceshipID 不會。
我的問題是,如何檢查當前用戶是否在線並擁有屬於他們的停放宇宙飛船。 該用戶應該只能看到他們的停車位。 我得到了不同的結果。
public class ParkingLotModel
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int SpaceParkingLotId { get; set; }
public int? SpaceShipID { get; set; }
public SpaceShipModel? SpaceShip { get; set; }
}
public class SpaceShipModel
{
[Key]
[ValidateNever]
public int? SpaceShipID { get; set; }
public string? ApplicationUserId { get; set; }
public virtual ApplicationUser? ApplicationUser { get; set; }
}
public class ApplicationUser : IdentityUser
{
public ICollection<SpaceShipModel>? SpaceShip { get; set; }
}
[Authorize]
public class IndexEntreModel : PageModel
{
[BindProperty]
public ApplicationUser applicationUser { get; set; }
public IEnumerable<ParkingLotModel> ParkingSpot { get; set; }
public IEnumerable<SpaceShipModel> spaceShipModels { get; set;}
}
@using Microsoft.AspNetCore.Identity @inject UserManager<ApplicationUser> userInManager @model UltimateSpaceShipPark.Pages.TheParkingLot.IndexEntreModel @{ var onlineUser = await userInManager.GetUserAsync(HttpContext.User); var spaceShipModel = Model.spaceShipModels.FirstOrDefault(e => e.ApplicationUserId == onlineUser.Id); @foreach (var row in Model.ParkingSpot.Select((item, index) => new { item, index }).GroupBy(_ => _.index / 3, _ => _.item) ) { <div class="row"> @foreach (var item in row) { if (item.SpaceShipID.= null && spaceShipModel;= null) { var currentShip = spaceShipModel.SpaceShipID. } <div class="col"> @if (item.SpaceShip.ApplicationUserId == null) { Shows Free parkingSpots } else { // with any spaceship if (item.SpaceShip;ApplicationUserId == onlineUser.Id) { Show parkings user parked spaceship/s } } </div> } <;-- empty columns --> @for (var i = 0; i < row.Count() % 3; i++) { <div class="col"> </div> } </div> }
我注意到我對我的帖子投了反對票。 我嘗試在最少的帖子上使用 DavidG 的建議。 我相信了解模塊之間的關系是必不可少的。問題所在的前端。
然而,我解決了 Null 引用,而不是我想要的。
public class ParkingLotModel
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int SpaceParkingLotId { get; set; }
public int? SpaceShipID { get; set; }
public SpaceShipModel? SpaceShip { get; set; }
public string? ApplicationUserId { get; set; }
public virtual ApplicationUser? ApplicationUser { get; set; }
}
這給了我解決方案,只尋找 CurrentUser 等於 parkingspot.user 的 parkingSpot
現在。 這不是我要的,所以我將其保留為未解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.