C# ASP.NET从表单绑定复杂类型属性

C# ASP.NET从表单绑定复杂类型属性,c#,.net,asp.net-core,data-binding,razor-pages,C#,.net,Asp.net Core,Data Binding,Razor Pages,我有一本书课: public class Book { public Genre Genre { get; set; } } 我有cshtml输入 <select asp-items="Model.Genres" asp-for="Book.Genre" class="custom-select"> </select> 但是在post这个请求之后,我在Author和Book属性中得到空值。我如何绑

我有一本
课:

public class Book
{
    public Genre Genre { get; set; }
}
我有
cshtml
输入

<select asp-items="Model.Genres" asp-for="Book.Genre" class="custom-select">
</select>


但是在
post
这个请求之后,我在
Author
Book
属性中得到空值。我如何绑定它?

您的类型是
枚举类型吗?

如果它不是枚举,而是以下常见类型:

然后,如果您只想从表单绑定一个复杂类型属性,您只需要直接绑定

例如:

<form method="post">
<input asp-for="Book.Genre.Id" />
<input asp-for="Book.Genre.Name" />
<input type="submit" value="submit" />
</form>
您可以将页面代码更改为:

<form method="post">
<select asp-for="Book.Genre"
        asp-items="Html.GetEnumSelectList<Models.Genre>()">
</select>
<input type="submit" value="submit" />
</form>

要绑定
书籍


您可以在

中查看详细信息。我想在select中显示已创建的作者和流派,我得到了它。现在,我想将此FK绑定到新创建的book对象,并且不复制作者和流派。使用
asp for=“您要绑定的属性”
,然后它将绑定dropdownlist的值。如果您有其他要求,请单击“Hi@salvatore”,请提供您的课程和详细信息。我有
书籍
课程,包含
流派
对象<代码>发布
新书需要从
选择
元素中选择现有类型。发布后,应将书籍添加到数据库中,属性类型为外键。检查文档以了解模型绑定
public class LoginModel : PageModel
{
    [BindProperty]
    public Book Book { get; set; }

    public List<SelectListItem> Genres { get; set; }

    public void OnGet()
    {
       Genres = new List<SelectListItem>
         {
            new SelectListItem { Value = "AA", Text = "AA" },
            new SelectListItem { Value = "BB", Text = "BB" },
            new SelectListItem { Value = "CC", Text = "CC"  },
         };
    }

    public IActionResult OnPost()
    {
        return Page();
    }
}
<form method="post">
<input asp-for="Book.Genre.Id" />

<select asp-items="Model.Genres" asp-for="Book.Genre.Name" class="custom-select">
</select>

<input type="submit" value="submit" />

</form>
public enum Genre
{    
    Mexico,
    USA,
    Canada,
    France,
    Germany,
    Spain
}
<form method="post">
<select asp-for="Book.Genre"
        asp-items="Html.GetEnumSelectList<Models.Genre>()">
</select>
<input type="submit" value="submit" />
</form>