내 MVC 응용 프로그램에서 ascx 부분 뷰를 몇 개 만들어서 재사용 가능한 기능을 캡슐화하고 SOR 및 SOC를 보관해야합니다. 그러나 MVC ascx 뷰를 구동하는 비즈니스 로직을 캡슐화하는 방법에 어려움이 있습니다.MVC : MVC ascx 부분 뷰에서 논리를 캡슐화하는 방법은 webforms ascx 컨트롤의 효율성과 동일합니까?
웹 폼에서 ASCX 컨트롤의 코드 숨김은 버튼 클릭 이벤트를 처리 할 수 있으며 브라우저는 여전히 하나의 포스트 백이있는 동일한 페이지를 표시합니다. MVC에서 동일한 것을 어떻게 보관할 수 있습니까? ~/Address/Edit/2에 다른 MVC 동작을 호출하는 버튼이있는 ascx 부분보기가 포함되어있는 경우 ~/ShareController/CommonAction - CommonAction이 포함 된 바로 그 뷰로 돌아가는 가장 좋은 방법은 무엇입니까? ascx 파일?
아마도 MVC 웹 개발에 공통 패턴이 누락 되었습니까?
는최대에게,
업데이트를 주셔서 감사합니다 : 주소 편집기 있어야
부분보기 : 여기에 내가 찾고 있어요 패턴에 대한 자세한 설명입니다. 주소를 확인하고 유효성 검증 오류를 표시하고 정보를 다시 데이터베이스에 저장할 수 있습니다.
주소 편집기는 다른 컨트롤러/동작이있는 여러 페이지에 있습니다.
전통적인 웹 폼에서 ascx 컨트롤은 URL을 변경하지 않고도 많은 포스트 백을 통해 사용자와 완벽하게 상호 작용할 수 있습니다. MVC에서 비슷한 시나리오에 대한 올바른 패턴은 무엇입니까?
업데이트 2 :
이 웹 양식의 statefullness와 아무가 확실하지. 완전히 다른 기능. 이것은 컨트롤러가 부분 뷰를 처리하기 위해 다른 하위 컨트롤러 (또는 하위 컨트롤러)를 호출하는 것입니다. 이 주석 끝에 나의 예를 보라.
나는 단지 캡슐화와 관심의 분리와 같은 수준을 달성하고 싶다. MVC 프레임 워크가 없다면, 그것은 심각한 약점입니다.
MVC에서 프레젠테이션뿐만 아니라 논리를 처리하고 간섭없이 다른 상위 페이지 내에 상주 할 수있는 "것"(또는 더 나은 대안이없는 부분 뷰)을 어떻게 가질 수 있습니까?
MVC의 부분 뷰는 주 컨트롤러를 방해하지 않고 전용 컨트롤러를 가질 수없는 프레젠테이션 일뿐입니다. 내가 잘못했기를 바란다.
또 다른 예를 들면, "stackoverflow.com/questions/{id}"를 읽고있는이 페이지를 생각해 보라. 여기에는 "주석 추가"구성 요소가 포함됩니다. 추가 주석은 유효하지 않은 주석을 방지하기 위해 서버 측 유효성 검사를 수행 할 수 있습니다. 페이지에 상주하고 필요한 컨트롤러 로직을 처리 할 수있는 엔드 투 엔드 "주석 추가"구성 요소를 어떻게 만들 수 있습니까? 내가 생각할 수있는 유일한 방법은 사용자 유효성 검사 메시지를 제공하고 포스트 백을 통해 오류를 수정하도록 요청할 수 있도록 호스트 페이지의 컨트롤러를 수정하는 것입니다. 즉, 10 개의 다른 페이지에 구성 요소를 추가하면 10 개의 다른 컨트롤러를 수정해야합니다. 그건 "죽는다"
내가 잘못 생각하니! MVC가 너무 좋아서.
결론 : 나는이 답변으로 케니의 대답을 표시
; 그러나 이것은 캡슐화, 재사용 가능성 및 DRY 주요 관점에서 볼 때 MVC 프레임 워크의 심각한 약점이라고 생각합니다.
제 의견은 웹 폼의 상태에 관계가 없습니다.
내가 설명 할 수 있도록하십시오 : 웹 양식에서
는, 당신은 100 %는 ASCX 컨트롤에서 물론 관련 CLASSLIB DLL을의 복잡한 기능을 캡슐화 할 수 있습니다. 1 명의 개발자가 개발에 수 주일을 소비 할 수 있습니다. 그의 작업이 끝나면 아무도 그것에 대해 알 필요가 없으며 단지 그것을 사용합니다. 사용자 컨트롤은 다른 "개발자 사용자"에게 ascx 구성 요소 내에서 발생하는 세부 활동을 신경 쓰지 않고도 많은 페이지에서 재사용 할 수 있습니다.
대조적으로 ascx partial이 사용자와 상호 작용해야하는 ASP.NET MVC에서는 결코 같은 결과를 얻을 수 없습니다. ascx가 상호 작용할 필요가 있으면 자신의 컨트롤러가 필요하며 컨트롤러는 ModelState를 보존해야합니다.
Jeremy Skinner는 MVCContrib에 [ModelStateToTempData]를 소개했습니다. http://www.jeremyskinner.co.uk/2008/10/18/storing-modelstate-in-tempdata-with-aspnet-mvc/ 그러나 이것은 단지 패치 일뿐입니다.
좋은 프레임 워크는 개발자가 자신의 작업을 컨트롤, 부분, ascx 등으로 캡슐화하고 나머지 팀원에게도 데이터를 알리지 않고 "그냥 사용할 수"있어야합니다. Winform은 여러 복잡한 시나리오에서이를 완벽하게 제공합니다.
아무튼 환영합니다.
특정 시나리오에서 사용되는 부분보기는 무엇입니까? 버튼 클릭의 목적은 무엇입니까? –
안녕하세요 Jeff, 방금 더 많은 코멘트를 추가했습니다. 감사. – DevTeach2010