Модели Razor Pages возвращают значение NULL для свойств модели, которые являются классами - PullRequest
0 голосов
/ 28 июня 2018

В моем проекте Razor у меня есть два класса следующим образом:

namespace reftest.Models
{
    public class Details
    {
        public int Id { get; set; }
        public int Age { get; set; }
        public int IQ { get; set; }
    }

    public class Person
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public Details Particulars { get; set; }
    }
}

Я добавил элемент скаффолдинга в соответствии с руководством, которое, как обычно, создавало страницы «Создать», «Удалить», «Детали», «Редактировать» и «Индексировать». Они работают правильно, поскольку поле Имя касается. Я могу создавать новые записи о персонале, редактировать их и т. Д. Возраст и IQ не отображались. Нет проблем - я зашел в Create.cshtml и добавил следующее:

<div class="form-group">
    <label asp-for="Person.Particulars.Age" class="control-label"></label>
    <input asp-for="Person.Particulars.Age" class="form-control" />
    <span asp-validation-for="Person.Particulars.Age" class="text-danger"></span>
</div>

Для соответствующего контроллера я ничего не менял, но вот для справки:

public class CreateModel : PageModel
{
    private readonly reftest.Models.reftestContext _context;

    public CreateModel(reftest.Models.reftestContext context)
    {
        _context = context;
    }

    public IActionResult OnGet()
    {
        return Page();
    }

    [BindProperty]
    public Person Person { get; set; }

    public async Task<IActionResult> OnPostAsync()
    {
        if (!ModelState.IsValid)
        {
            return Page();
        }

        _context.Person.Add(Person);
        await _context.SaveChangesAsync();

        return RedirectToPage("./Index");
    }
}

В нем отображалось текстовое поле для возраста, и когда я ввел значение и отправил новую запись, она была сохранена. Я знаю это, просматривая записи в БД, где я вижу строку в таблице Details и соответствующий (и правильный) номер Id для этой записи в столбце Particulars таблицы Person.

Однако, что бы я ни делал, я не могу получить его как часть модели Person. Значение для данных всегда равно нулю. Например, на странице Подробности у меня есть это:

<dl class="dl-horizontal">
    <dt>
        @Html.DisplayNameFor(model => model.Person.Particulars.Age)
    </dt>
    <dd>
        @Html.DisplayFor(model => model.Person.Particulars.Age)
    </dd>
</dl>

, который всегда отображает пустое поле. В соответствующем файле .cshtml.cs у меня есть это:

public class DetailsModel : PageModel
{
    private readonly reftest.Models.reftestContext _context;

    public DetailsModel(reftest.Models.reftestContext context)
    {
        _context = context;
    }

    public Person Person { get; set; }

    public async Task<IActionResult> OnGetAsync(int? id)
    {
        if (id == null)
        {
            return NotFound();
        }

        Person = await _context.Person.FirstOrDefaultAsync(m => m.Id == id);

        if (Person == null)
        {
            return NotFound();
        }
        return Page();
    }
}

Person.Particulars всегда возвращается как ноль. Это просто не заполняет это. Но я вижу правильные данные и внешний ключ в базе данных. Как я могу получить его для заполнения?

...