2017-02-26 35 views
1

我开始学习AspNetCore,并且我想知道如何在视图中绑定嵌套属性。如何使用aspnet核心绑定视图中的嵌套属性

我有这个两个对象

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如何?

在此先感谢。

Jolynice

回答

1

一旦物体被加载到内存中,您可以在视图模型中引用它。 与EF的一件事是加载通常需要显式加载。

例如: (在这个例子中,您引用的实体是一个不是集合)

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

的完整性,为集合(项目列表)让我们假设你的用户属性的列表用户喜欢

public ICollection<ApplicationUser> IdUserNavigations {get;set;} 

...

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

注意收集是针对枚举的,参考是针对单个实体的。

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

...

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

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

Thansk Marc,为解释。 – jolynice

+0

@jolynice随时。 – Marc