Razor Pages模型为类的模型属性返回null

时间:2018-06-28 19:42:41

标签: c# razor .net-core

在我的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。它根本不会填充它。但是我可以在数据库中看到正确的数据和外键。我如何才能填充它?

0 个答案:

没有答案