2017-02-26 1 views
1

AspNetCore를 배우기 시작했으며보기에서 중첩 된 속성을 바인딩하는 방법을 알고 싶습니다. aspnet 코어가있는보기에서 중첩 된 속성을 바인딩하는 방법

는 내가보기

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

에 UserViewModel을 바인딩 할 지금이 두 객체

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

을 내가 어떻게 바인딩 Club.Name 및 Club.Position?

미리 감사드립니다.

Jolynice 객체가 메모리에로드되면

답변

1

, 당신은 당신의 ViewModel 내에서 참조 할 수 있습니다. EF를 사용하는 것 중 하나는 일반적으로 로딩이 필요하다는 것입니다.

예를 들어

가 : (이 예에서는 사용자의 참조 된 엔터티가 단일 아닙니다 컬렉션) 컬렉션 (항목 목록)에 대한 완성도에 대한

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

는 사용자 속성의 목록입니다 가정 할 수 있습니다

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

과 같은 사용자 ...

_dbContext.Entity(club).Collection(a => a.IdUserNavigations).Load(); 
,321 0은 컬렉션이 enumerables 용이고 참조가 단일 엔티티 용임을 알립니다.

일단 이것을 실행하면 뷰 모델을 전달할 때보기에서 엔터티에 액세스 할 수 있습니다.

...

참조 모델은 모든 수업과 동일한 방식입니다.

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

Thansk Marc, 설명. – jolynice

+0

@ 언제든지. – Marc

관련 문제