NullReferenceException при использовании бритвенных операторов if - PullRequest
2 голосов
/ 11 марта 2019

У меня есть простое представление сведений, которое использует два оператора if, если пользователь является Customer, оно отображает свойства клиента. Если пользователь 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 Ответ

1 голос
/ 13 марта 2019

На самом деле вы пытаетесь получить доступ к свойству 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 {
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...