【问题标题】:ASP .NET bind complex type property from formASP .NET 从表单绑定复杂类型属性
【发布时间】:2021-08-12 22:56:13
【问题描述】:

我有一个Book 类:

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

我有cshtml 输入

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

但是在POSTing 这个请求之后,我在Author 和Book 属性中得到了空值。这个怎么绑定?

【问题讨论】:

    标签: c# .net asp.net-core data-binding razor-pages


    【解决方案1】:

    你的类型是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>
    

    绑定Book。

    您可以在Official document查看详细信息

    【讨论】:

    • 我想在选择中显示已经创建的作者和流派,我明白了。现在我想将此 FK 绑定到新创建的书籍对象,并且不要复制作者和流派。
    • 使用asp-for="the property you want bind",会绑定下拉列表的值。
    • 嗨@salvatore,如果您有其他要求,请提供您的班级和详细信息。
    • 我有 Book 包含 Genre 对象的类。 POST 新书需要从 select 元素中选择现有类型。发布书籍后应将属性类型作为外键添加到数据库中。
    • 查看文档了解模型绑定
    猜你喜欢
    • 1970-01-01
    • 2019-11-11
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 2017-03-26
    • 2010-10-15
    • 2016-06-16
    相关资源
    最近更新 更多