使用razor if语句时出现NullReferenceException

时间:2019-03-11 18:13:57

标签: c# asp.net-mvc razor

我有一个简单的详细信息视图,如果用户是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; }
}

1 个答案:

答案 0 :(得分:1)

实际上,您正在尝试访问CustomerInvestor尚未初始化的属性。首先检查天气CustomerInvestor是否为空,然后检查其属性。

@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 {
}