2012-09-12 4 views
0

문제는 다음과 같습니다. json을 반환하는 작업 메서드가 있습니다. 내가해야할 일은 JSON을 사용하여 HTML을 구성하는 것이다. 예를 들어 내가 자동차 목록을받는다고 말할 수 있습니다. json을 사용하여 html을 만드는 가장 좋은 방법

<div id="cars"> 
@foreach(var car in Model) 
{ 
    <p>car.Name</p> 
} 
</div> 

<div id="pageLinks"> 
    @Html.MyPageLinks(Model.PageInfo) 
</div> 

는 현재이 전망이며, 내가 무엇을 할 것은 ( this link 확인) 컨트롤러에서 해당 뷰 렌더링 및 JSON 결과로 전체 결과를 반환 할 수 있습니다 : 내가하고 싶은 예를 들어 이런 식으로 목록을 표시합니다. 모든 것이 훌륭하지만, 단 하나의 큰 단점이 있습니다. 액션 메소드는 테스트 할 수 없습니다. FindPartialView을 작동 시키려면 (그리고 현재는이 문제로 고민하고 있습니다.) 수많은 것을 모의해야하므로 작동 방법을 테스트 할 수 없습니다. 더 나쁜 것은 뷰를 동작과 결합한 것입니다. 즉 뷰를 변경하면 유닛 테스트에 해를 끼칠 수 있으며 이는 허용되지 않습니다.

다른 한편으로는 모든 HTML을 생성하기 위해 javascript를 사용하는 것은 원시 자바 스크립트 및 jquery가 될 것이므로 매우 나쁜 접근 방법으로 보입니다 (내 단순화 된 예제에서도 많은 js와 나는 모든 것이 js 일 것이기 때문에 MyPageLinks를 테스트하는 옵션을 잃어 버릴 것입니다.)

내가 원한다면 /하고 싶은 것은 단지 json (데이터 객체, HTML이 아님) 만 반환하고 json이 반환되면 적용될 템플릿과 같은 것을 가질 수 있습니다.

답변

1

컨트롤러 동작에서 JSON이 아닌 HTML 만 반환하면됩니다.

<div id="paginatedCars"> 
    @Html.Partial("Cars") 
</div> 

를 한 다음이 부분 업데이트 반환 호출하는 컨트롤러 액션이 : 그래서보기를 넣어 당신이 사업부 내부에 랩 부분으로 보여 주었다 니펫을.

+0

나는 이것을 잘 이해하지 못했다. 페이지는 ajax 요청을 사용합니다. 예 : 첫 번째 작업 메소드는 일반적인 ViewResult이며 검색에 필요한 모든 데이터를 표시합니다. 그러나 검색 버튼은 서버에 연결하고 JsonResult 인 두 번째 작업 메서드를 호출하고 첫 번째보기를 비동기 적으로 업데이트하는 일부 j를 호출합니다. – Unknown

+0

그건 문제가 아닙니다. AJAX 요청을 'PartialView'를 반환하는 컨트롤러 액션으로 트리거하고, AJAX 요청의 성공 콜백에서 DOM을 새로 고칩니다. '$ ('# paginatedCars ') .html (result)' 여기서'result'는 분명히 AJAX로 호출 한 컨트롤러 액션에 의해 반환 된 부분적인 HTML입니다. 이 경우에는 JSON이 필요하지 않습니다. –

+0

나는 완전한 바보 야. 문제를 복잡하게 만드는 것은 심각한 단점이 될 수 있습니다. :). 도움을 많이 주셔서 감사합니다. – Unknown

관련 문제