2017-02-26 4 views
1

Ich bin dabei, AspNetCore zu lernen, und ich möchte wissen, wie eine verschachtelte Eigenschaft in der Ansicht zu binden.Wie eine geschachtelte Eigenschaft in einer Ansicht mit Aspnet-Kern zu binden

Ich habe diese beiden Objekt

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; } 
} 

jetzt ich die UserViewModel der Ansicht

@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> 

Wie kann ich Bind Club.Name und Club.Position binden möchten?

Vielen Dank im Voraus.

Jolynice

Antwort

1

sobald das Objekt in den Speicher geladen wird, können Sie es in Ihrem Viewmodel verweisen. Eines der Dinge mit EF ist, dass Laden erfordert explizite laden.

zum Beispiel: (in diesem Beispiel Ihre referenzierten Entität nicht eine Sammlung Single ist)

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

für Vollständigkeit, für eine Sammlung (eine Liste von Elementen) können Sie Ihre Benutzereigenschaft übernehmen Sie eine Liste von Benutzer wie

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

...

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

Beachten Sie, dass Sammlung für Aufzählungen und Verweis für einzelne Entität ist.

Sobald diese ausgeführt wurde, können Sie auf die Entität in Ihrer Ansicht zugreifen, wenn Sie Ihr Viewmodel übergeben.

...

Referenz das Modell die gleiche Art und Weise würden Sie jede Klasse.

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

Thank Marc, für die Erklärung. – jolynice

+0

@jolynice jederzeit. – Marc

Verwandte Themen