문제

두 개의 종속 드롭 다운 목록이있는 응용 프로그램이 있습니다. 여기서 사용자가 목록 상자 A에서 값을 선택하면 목록 상자 B에서 사용 가능한 입력 세트를 업데이트합니다. 사용자가 제조업체를 선택하면 모델 목록이 그에 따라 업데이트됩니다.

Winforms에서는 Autopost Back 이벤트에서 처리됩니다. ASP.NET MVC에서 어떤 기술/접근 방식을 취해야합니까? Ajax를 통해 이루어 집니까? MVC의 속도를 높이려고 노력하고 직장에서 처리하도록 요청받는 일반적인 작업을 처리하기위한 전략을 구축하려고합니다.

이 게시물에 대답하는 데 기여한 모든 분들께 감사드립니다.

도움이 되었습니까?

해결책

나는 Ajax를 통해 이것을 할 것입니다. 이러한 컨트롤이있는 경우 :

<select id="makes" /> 그리고 <select id="models" />

그런 다음 jQuery 로이 작업을 수행 할 수 있습니다.

$().ready(function() {
   $("select#makes").change(function() {
        var make = this.value;          
        $.getJSON('models/list?make=' + make, function(data) {
              //load 2nd dropdown with result
        })
   });
});

그런 다음 JSON 데이터 구조를 반환하는 ModelsController라는 List ()에 대한 조치가 필요합니다.

다른 팁

ASP.NET MVC를 사용하고 있다는 것은 다소 관련이 없습니다. 웹 페이지에 기본적 으로이 유형의 UI 정비사에 대한 세 가지 옵션이 있습니다.

  1. 목록의 데이터가 비교적 작고 드물게 변경된 경우, 초기 요청의 페이지의 모든 가능한 데이터를 JavaScript 배열 또는 페이지 마크 업의 숨겨진 요소와 같은 페이지의 모든 가능한 데이터를 사전로드하는 것이 가장 쉬울 수 있습니다. 상자 A 값이 변경되면 JavaScript는 Box B의 내용을 적절한 데이터로 대체합니다. 이 모든 것은 서버로 다시 요청하지 않고 발생하여 매우 빠르게 만듭니다. 그러나이 메소드는 데이터의 크기가 초기 페이지로드의 응답 시간에 영향을 미치면 분류됩니다.

  2. 목록의 데이터가 크거나 자주 변경되는 경우 (시간 프레임 내에서 사용자가 페이지에 결정을 내릴 수있는 경우), 레거시 방법은 상자 a의 값이 새 쿼리 인수로 페이지를 다시로드하는 것입니다. 변화. 백엔드의 코드는 새로운 인수에 따라 출력을 조정합니다. 페이지의 나머지 렌더링 코드가 얼마나 복잡한 지에 따라 비용이 많이들 수 있습니다.

  3. 이것은 옵션 2의 변형이며 기본적으로 Ben Scheirman이 Ajax에 관한 답변입니다. 상자 A가 변경 될 때 여전히 주문시 박스 B의 내용을로드하고 있습니다. 차이점은 전체 페이지가 아닌 변경된 페이지의 부분 만로드하는 것입니다.

개인적으로, 데이터가 옵션 1을 사용하기에 충분히 작 으면 아마도 성능으로 인해 내가 할 것입니다. 그렇지 않으면 옵션 3으로 가십시오. 특히 이미 다른 AJAX 관련 사항이 이미 구현 된 경우 이미 구현되었습니다. 옵션 2는 요즘 많은 사람들이 레거시 정비공으로 간주되는 것 같습니다.

기능적으로 두 개의 드롭 목록을 자신의 부분보기에 배치 한 다음 Lista의 값을 선택할 때만 반환합니다. 레이아웃 목적으로 불가능하다면 위의 Ben의 방법은 좋아 보입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top