如何使用 aspnet core 在视图中绑定嵌套的 属性

How to bind a nested property in a view with aspnet core

我开始学习AspNetCore,我想知道如何在视图中绑定一个嵌套的属性。

我有这两个对象

public partial class Club
{
    public Guid Id { get; set; }
    public string IdUser { get; set; }
    public string Name { get; set; }
    public string Position { get; set; }
    public virtual ApplicationUser IdUserNavigation { get; set; }
}

public class UserViewModel
{
    public string Id { get; set; }
    public string UserName { get; set; }
    [DataType(DataType.Password)]
    public string Password { get; set; }
    [Display(Name = "Confirm Password")]
    [DataType(DataType.Password)]
    public string ConfirmPassword { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }

    public Club Club { get; set; }

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

    [Display(Name = "Role")]
    public string ApplicationRoleId { get; set; }
}

现在我想将 UserViewModel 绑定到视图

    @model TestingViewModels.Users.UserViewModel
    @using Testing.ViewModels.Roles
<form asp-action="AddUser" role="form">
    @await Html.PartialAsync("_ModalHeader", new ModalHeader { Heading = "Add User" })
    <div class="modal-body form-horizontal">
        <div class="row">
            <div class="col-lg-6">
                <div class="form-group">
                    <label asp-for="Name" class="col-lg-3 col-sm-3 control-label"></label>
                    <div class="col-lg-6">
                        <input asp-for="Name" class="form-control" />
                    </div>
                </div>
                <div class="form-group">
                    <label asp-for="Email" class="col-lg-3 col-sm-3 control-label"></label>
                    <div class="col-lg-6">
                        <input asp-for="Email" class="form-control" />
                    </div>
                </div>
                <div class="form-group">
                    <label asp-for="ApplicationRoleId" class="col-lg-3 col-sm-3 control-label"></label>
                    <div class="col-lg-6">
                        <select asp-for="ApplicationRoleId" asp-items="@Model.ApplicationRoles" class="form-control">
                            <option>Please select</option>
                        </select>
                    </div>
                </div>
            </div>
            ....    

            <div class="col-lg-6">
                <div class="form-group">
                    <!--THIS DON´T WORK-->
                    <label asp-for="Club.Name" class="col-lg-3 col-sm-3 control-label"></label>
                    <div class="col-lg-6">
                        <input asp-for="Club.Name" class="form-control" />
                    </div>
                </div>
                <div class="form-group">
                <!--THIS DON´T WORK-->
                    <label asp-for="Club.Position" class="col-lg-3 col-sm-3 control-label"></label>
                    <div class="col-lg-6">
                        <input asp-for="Club.Position" class="form-control" />
                    </div>
                </div>
            </div>

        </div>
    </div>
    @await Html.PartialAsync("_ModalFooter", new ModalFooter { })
</form> 

如何绑定 Club.Name 和 Club.Position?

提前致谢。

乔丽妮丝

一旦对象被加载到内存中,您就可以在您的视图模型中引用它。 EF 的一个问题是加载通常需要 显式 加载。

例如: (在此示例中,您引用的实体是单个实体而不是集合)

_dbContext.Entity(club).Reference(a => a.IdUserNavigation).Load();

为了完整起见,对于一个集合(项目列表),我们假设您的用户 属性 是像

这样的用户列表
 public ICollection<ApplicationUser> IdUserNavigations {get;set;}

...

_dbContext.Entity(club).Collection(a => a.IdUserNavigations).Load();

注意集合是针对可枚举的,引用是针对单个实体的。

执行此操作后,您可以在传递视图模型时访问视图中的实体。

...

引用模型的方式与引用任何模型的方式相同 class。

<input asp-for="Club.Name" class="form-control" />