В моем проекте 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 всегда возвращается как ноль. Это просто не заполняет это. Но я вижу правильные данные и внешний ключ в базе данных. Как я могу получить его для заполнения?