2012-02-17 3 views
1

pjax을 구현하는 MVC3 응용 프로그램이 있습니다. 주소가로드 될 때 서버 측에서 수행해야 할 작업을 제외하고 모든 것이 잘 작동하고 있으며 클라이언트 측에서 주보기가 아직없는 상태입니다. 내 컨트롤러 코드가 #update_panel의 부분 뷰를 삽입 그래서 기본보기로 부분보기 스틱 수있는 방법 MVC3을 사용하여 뷰의 특정 위치에 뷰의 부분 뷰를 삽입하는 방법은 무엇입니까?

public virtual ActionResult Details(Guid id) 
    { 
     var partDetail = new PartDetail(id); 
     var partialView = PartialView("Details", partDetail); 
     if(Request.Headers["X-PJAX"]!= null) 
     { 
      return partialView; 
     } 

     var mainView = View("Index"); 
     // Stick Partial View into main view at #update_panel? 
     return mainView; 
    } 

처럼 보인다?

답변

2

좋아요, 주요 리펙터가 없으면 다음을 수행 할 수 있습니다.

(여기서는 index.cshtml의 @modelPartDetail()으로 설정할 수 있다고 가정합니다). 위의 컨트롤러 액션에서

은 변경 :

var mainView = View("Index"); 

에 :

<div id="update_panel">@RenderPartial("Details", Model)</div> 

내가 말했듯이 :

var mainView = View("Index", partDetail); 

다음, 당신의 index.cshtml 내부에 다음을 추가 , 이것은 인덱스 @ 모델이 PartDetail()으로 설정된 경우에만 작동하며, 그렇지 않은 경우에는 모델의 리팩토링이 전자 색인보기는이 PartDetail() 모델을 포함해야합니다. 이 뷰 모델은 물론 다음과 같습니다

public class IndexViewModel 
{ 
    ModelForIndex Index{get; set;} 
    PartDetail Details{get; set;} 
} 

이 리팩토링 뷰 모델

@model IndexViewModel로 index.cshtml에 추가로 부분에 의해 소비 될 것이다 :이 말이

<div id="update_panel">@RenderPartial("Details", Model.Details)</div> 

희망.

+0

좋아, 거기서 뭘하는지 알 겠어. 인덱스 뷰를 여러 다른 부분의 컨테이너로 사용한다. 모델을해야하나요? = null 문은? 주요 리팩토링 없이도 작동 할 수 있지만 조금 살살해야합니다. 어떤 종류의 '주요'리팩토링을 제안 하시겠습니까? – PlTaylor

+0

위의 수정안을 참조하십시오 - 마이너 조정 (또는하지 않음 :-)) –

+0

점심 식사 후에 이것으로 놀아 볼게요.하지만 꽤 괜찮은 방법이라고 생각합니다. – PlTaylor