2017-02-26 31 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