0

다른 모델의 목록이 포함 된 모델이 있습니다.MVC Asp.net Actionlink를 사용하여 뷰에서 컨트롤러로 복잡한 객체 목록을 전달하는 방법은 무엇입니까?

public class RentalModel 
{ 
    public int RentalId { get; set; } 
    public string CustomerId { get; set; } 
    public List<MovieModel> Movies { get; set; } 
} 

가 그럼 난 임대를 클릭하는 세부 것, 모든 임대가 표시되는 곳이 있습니다

public class MovieModel 
{ 
    public int MovieId { get; set; } 
    public string Title { get; set; } 
    public string Director { get; set; } 
} 

그런 다음 나는 RentalModel 있습니다 의가 나는 MovieModel 있다고 가정 해 봅시다 은 "ShowRentals.aspx"에서 "ShowRentalDetails.aspx"로 표시

<% using (Html.BeginForm()) { %> 
<% foreach(var rent in Model) { %> 
<div class="editor-label">    
    <div class="editor-field">     
       <%: rent.RentalId %> 

<%: Html.ActionLink("Details", "ShowRentalDetails", 
        new {rentalId = rent.RentalId, 
        customerId = rent.CustomerId, 
        movies = rent.Movies, 
    })%>  

내가 디버깅 할 때, 나는 영화 목록은 항상 null 인 것을 알 수있다. 이는 Id와 같이 기본 매개 변수 만 성공적으로 전달되기 때문입니다. 복잡한 유형을 전달할 수 없었습니다. 컨트롤러에 전달하려면이 목록이 정말로 필요합니다. 액션 링크가 불가능하기 때문일 수 있습니까? 다른 해결 방법은 무엇입니까? 나는 이것에 잠시 붙어 있었어. 맨손으로 여기에 신경 쓰지 마세요, 이것은 제가 목록으로 무엇을하고 있는지 보여주기위한 것입니다. 도와주세요.

컨트롤러에서

는, 여기에 두 가지 작업, ShowRentals 및 ShowRentalDetails의 (후속) :

public ActionResult ShowRentals() 
    { 
     MembershipUser user = Membership.GetUser(User.Identity.Name, true); 
     Guid guid = (Guid)user.ProviderUserKey; 

     Entities dataContext = new Entities(); 
     Member member = dataContext.Members.Where(m => m.UserID == guid).First(); 

     IEnumerable<RentalModel> toReturn = from r in member.Rentals 
              select new RentalModel 
               { 
                RentalId = m.RentalID, 
                CustomerId = m.CustomerID, 
               }; 
     return View(toReturn); 


    } 

[Authorize] 
    public ActionResult ShowRentalDetails(RentalModel model, List<MovieModel> movies) 
    {  
     return View("ShowRentalDetails", model);   
    } 

데이터베이스에 영화의 배열입니다 때문에 나는 ShowRentals에서 설정할 수 없습니다를 MovieModel이 아닌 동영상 유형이므로 두 목록은 호환되지 않습니다. ShowRentals 뷰에서 전달되고 모델이 mvc에 의해 재구성 된 경우 모델에서 null이고 action 링크에서 명시 적으로 매개 변수로 전달 된 경우에도 모델이 작동하지 않습니다. 도움!

+0

전체 개체를 보내거나 Movie ID를 보내고 서버에로드 할 수 있습니까? –

+0

전체 목록을 보내야합니다. 아니면 전체 모델을 보내겠습니까? 어느 쪽이든 컨트롤러 쪽에서 해당 목록에 액세스하여 세부 정보보기 페이지에 표시해야합니다. – dumbfreak

+0

컨트롤러도 볼 수 있습니까? – Shaokan

답변

0

Html.ActionLink가 GET을 수행하고 GET을 사용하여 복잡한 데이터 유형을 전달할 수 없다고 생각합니다.

대여 ID를 사용하여 ShowRentDetails 컨트롤러에서 영화 목록을 다시 가져올 수 있다면 가장 좋을 것이라고 생각합니다.

그렇지 않으면 EditorFor 템플릿을 조회 할 수 있습니다. MovieModel 용 템플릿을 editorfor로 만들고 RentalModel을 ShowRentDetails에 게시하면 MovieModel 목록을 이와 같이 얻을 수 있습니다.

다른 방법으로는 http://weblogs.asp.net/shijuvarghese/archive/2010/03/06/persisting-model-state-in-asp-net-mvc-using-html-serialize.aspx을 참조하십시오. ASP.NET MVC - Trouble passing model in Html.ActionLink routeValues

+0

을 확인합니다. 제가 알고있는 것은 영화 목록을 컨트롤러에 전달하는 방법을 테스트 한 것입니다. 모델 자체가 업데이트되지 않았기 때문에 그것이 유일한 방법 인 것처럼 보였습니다. 영화 목록은 컨트롤러 측면에 도달하면 모델 안에 null을 반환합니다. – dumbfreak

+0

또한 컨트롤러에서 영화 목록을 가져올 수없는 것처럼 보입니다. 측면 및 데이터베이스에 액세스, 나는 단지 내가 볼 수있는 MovieModel 형식이 아닌 Movie 형식의 목록을 얻을 수 있습니다. – dumbfreak

+0

@dumbfreak 나는 내 대답에 편집 된 링크를 사용해보십시오. 결코 시도하지는 않았지만 원하는대로 주어진다면 최선의 방법이 될 수 있습니다. – DMulligan

0

그것은 분명 당신 캔트 패스 : 이미 모델

소스에 포함 된 경우 보조 노트에

List<MovieModel> movies 

ShowRentDetails에서 두 번째 매개 변수를 만들 필요가 프로그래머 없다 액션 링크를 통해 복잡한 뷰 모델. 복잡한 속성이없는 단순한 객체를 전달할 가능성이 있습니다. 여러 제출 버튼으로 할 수있는 다른 방법이 있으며 컨트롤러에 게시 할 수 있습니다. 제출을 통해 복잡한보기 모델을 게시 할 수 있습니다.

관련 문제