在我的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; }
}
}
我按照教程添加了一个脚手架项目,该教程照常创建了创建,删除,详细信息,编辑和索引页面。就“名称”字段而言,它们可以正常工作。我可以创建新的“人”记录,对其进行编辑等。年龄和智商未显示。没问题-我进入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");
}
}
它显示了一个用于“年龄”的文本框,当我输入一个值并提交新记录时,它被保存了。通过查看数据库记录,我可以在“详细信息”表中看到一行,并在“人”表的“详细信息”列中看到该记录的对应(正确)ID号,从而知道这一点。
但是,无论如何我都无法将其作为Person模型的一部分进行检索。 “特殊信息”的值始终为Null。例如,在“详细信息”页面上,我有以下内容:
<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.Specials始终返回null。它根本不会填充它。但是我可以在数据库中看到正确的数据和外键。我如何才能填充它?