我有一个简单的详细信息视图,如果用户是Customer
,则使用两个if语句,它显示客户属性。如果用户是Investor
,则会显示其属性。
我的问题是我的if语句适用于一个或另一个,但不适用于两个。给我一个:
NullReferenceException:对象引用未设置为对象的实例
尝试同时使用两个if语句时。
我的观点
@model MyProject.Models.ApplicationUser
<h3>
@Html.DisplayFor(m => Model.FirstName)
@Html.DisplayFor(m => Model.LastName)
</h3>
@if (Model.Customer.CustomerId != null)
{
<div class="form-group">
<strong>Tax ID:</strong>
@Html.DisplayFor(m => m.Customer.TaxId)
</div>
} else {
}
@if (Model.Investor.InvestorId != null)
{
<div class="form-group">
<strong>Social Security #:</strong>
@Html.DisplayFor(m => m.Investor.SsnNum)
</div>
<div class="form-group">
<strong>Date of birth:</strong>
@Html.DisplayFor(m => m.Investor.DOB)
</div>
} else {
}
控制器
public async Task<IActionResult> Details(string id)
{
if (id == null || id.Trim().Length == 0)
{
return NotFound();
}
var userFromDb = await _db.ApplicationUser.Include(u => u.Investor).Include(u => u.Customer).FirstOrDefaultAsync(i => i.Id == id);
if (userFromDb == null)
{
return NotFound();
}
return View(userFromDb);
}
投资者
public class Investor
{
[Key, ForeignKey("ApplicationUser")]
public string InvestorId { get; set; }
public virtual ApplicationUser ApplicationUser { get; set; }
[Required]
[Display(Name = "SSN")]
public string SsnNum { get; set; }
[Display(Name = "Date of Birth")]
public DateTime DOB { get; set; }
}
答案 0 :(得分:1)
实际上,您正在尝试访问Customer
或Investor
尚未初始化的属性。首先检查天气Customer
或Investor
是否为空,然后检查其属性。
@model MyProject.Models.ApplicationUser
<h3>
@Html.DisplayFor(m => Model.FirstName)
@Html.DisplayFor(m => Model.LastName)
</h3>
@if (Model.Customer?.CustomerId != null)
{
<div class="form-group">
<strong>Tax ID:</strong>
@Html.DisplayFor(m => m.Customer.TaxId)
</div>
} else {
}
@if (Model.Investor?.InvestorId != null)
{
<div class="form-group">
<strong>Social Security #:</strong>
@Html.DisplayFor(m => m.Investor.SsnNum)
</div>
<div class="form-group">
<strong>Date of birth:</strong>
@Html.DisplayFor(m => m.Investor.DOB)
</div>
} else {
}