ASP.NET从窗体绑定复杂类型属性



我有一个Book类:

public class Book
{
public Genre Genre { get; set; }
}

我有cshtml输入

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

但在POSTing之后,我在AuthorBook属性中得到了null。我该如何绑定?

您的流派是enum类型吗

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

public class Genre
{
public int Id { get; set; }
public string Name { get; set; }
}

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

示例:

<form method="post">
<input asp-for="Book.Genre.Id" />
<input asp-for="Book.Genre.Name" />
<input type="submit" value="submit" />
</form>

如果您想使用下拉列表。您可以按如下方式更改代码

页面模型:

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>

以结合CCD_ 7。

您可以在官方文档中查看详细信息

最新更新