2010-03-09 5 views
0

여러 부분 뷰가 포함 된 MVC 뷰가 있습니다. 이러한 부분 뷰는 부분 요청을 사용하여 채워 지므로 뷰 자체의 컨트롤러는 데이터를 전달하지 않습니다. 작업이 다른 작업에서 트리거 된 경우 부분 뷰 중 하나에서 데이터를 다시로드 할 수 있습니까? 예를 들어, 하나의 부분 뷰에 jqGrid가 있고 사용자가이 격자에서 새 행을 선택할 때 다른 부분 뷰에서 데이터를 새로 고칩니다. 이 시나리오 (C#)의 코드 예제에서 내가 뭘 잘못하고 있는지 살펴볼 수 있습니까? 새 요청을 트리거하려면 아약스 호출을 사용하고 있지만 문제가 라우팅, 컨트롤러 또는이 모든 경우에도 가능한 경우 확실하지 오전 부분보기 중 아닌 새로 고쳐집니다! 감사합니다.ASP .NET MVC 부분 뷰 및 라우팅

답변

3

부분보기 동작이 ViewResult를 반환하면 응답에 HTML 조각이 포함됩니다. 그러나 Ajax 호출은 DOM에 결과를 자동으로 삽입하지 않으므로 결과가 여러 가지 형식이 될 수 있고 DOM을 업데이트하기 전에 추가 처리가 필요할 수 있습니다. 따라서 부분 뷰를 새로 고치려면 Ajax 호출 결과를 가져 와서 DOM 트리의 올바른 위치에 삽입해야합니다.

jQuery에는이 프로세스가 캡슐화되어있는 load() 메서드가 있습니다. Ajax 호출을 수행하고 결과를 가져와 선택한 요소의 내부 HTML을 바꿉니다. 어떤 방식 으로든 결과를 변환해야하는 경우 DOM 트리에 삽입하기 전에 실행될 자체 함수를 전달할 수도 있습니다.

사이드 노트 :jQuery.load()strips scripts returned in the result. 그것은 특정 sceanrios에서 실행을 위해 그들을 유지하지만, 심지어 다른 시나리오에서 그들을 실행하지 않습니다. 따라서 부분 뷰에 스크립트가 포함 된 경우 DOM 트리를 직접 업데이트하는 것이 좋습니다.

이 모든 것은 서버 측에서 실행되는 C# 코드와 아무 관련이 없습니다.

그러나 요청이 일반 HTML인지 확인하여 결과를 브라우저에서 직접 렌더링하거나 Ajax 호출에서 결과를 얻을 수 있으므로 작업을 조금 더 똑똑하게 할 수 있습니다 DOM에 들어가기 전에 스크립트에 의해 처리됩니다. 이 확인은 Request 확장 방법 IsAjaxRequest을 사용하여 수행됩니다.