ASP.NET MVC에서 사용자 컨트롤을 구현하는 가장 좋은 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/41717

  •  09-06-2019
  •  | 
  •  

문제

이 사이트의 다른 많은 사람들과 마찬가지로 나도 향후 프로젝트를 위해 ASP.NET MVC로 전환하는 것을 고려하고 있습니다.현재 내 사이트는 전통적인 ASP.NET 2.0 Web Forms를 실행하고 있으며 우리에게는 잘 작동합니다. 따라서 다른 옵션은 내가 알고 있는 내용을 고수하고 통합 AJAX 기능을 갖춘 ASP.NET 3.5로 전환하는 것입니다.

ASP.NET MVC에서 사용자 컨트롤이 어떻게 작동하는지 궁금합니다.우리는 수많은 .ASCX 컨트롤과 몇 가지 복합 컨트롤이 있습니다.웹 디자이너와 함께 작업할 때 프로그래밍 지식이 없어도 ASCX 컨트롤을 효과적으로 사용하도록 하는 것이 매우 쉽기 때문에 이는 확실한 장점입니다.그러나 물론 단점은 페이지 수명 주기가 짜증날 수 있다는 것과 ASCX 컨트롤이 서로 다른 프로젝트 간에 공유하기 어렵다는 사실입니다.복합 컨트롤은 공유 가능하지만 기본적으로 디자이너에게는 블랙박스입니다.

ASP.NET MVC의 모델은 무엇입니까?ASCX 및 복합 컨트롤을 사용하여 처리한 문제를 해결하는 컨트롤을 만드는 방법이 있습니까?코드 손상에 대한 걱정 없이 웹 디자이너가 쉽게 액세스할 수 있도록 하는 것은 중요한 고려 사항입니다.

도움이 되었습니까?

해결책

사용자 컨트롤을 구현하려면 다음 호출을 수행합니다.

<% Html.RenderPartial("~/Views/Shared/MyControl.ascx", {data model object}) %>

PR5부터 더 이상 유효하지 않은 이전 구문을 볼 수도 있습니다.

<%= Html.RenderUserControl("~/Views/Shared/MyControl.ascx", {data model object}) %>

Web Forms에서 MVC로 이동할 때 항상 코드 중단에 대해 걱정해야 하지만 ASP.NET MVC 팀은 문제를 최소화하기 위해 훌륭한 작업을 수행했습니다.

다른 팁

Nick이 제안한 대로 실제로 사용자 컨트롤을 렌더링할 수 있지만 기존 ASP 웹 양식의 페이지 주기, 페이지 상태 및 포스트백은 더 이상 작동하지 않으므로 컨트롤이 쓸모 없게 될 가능성이 높습니다.

웹 사이트를 MVC로 포팅하려면 대부분의 복잡한 컨트롤을 다시 작성해야 하지만, 예를 들어 서식만 제공하고 포스트백 상태가 없는 간단한 컨트롤은 간단히 작동해야 합니다.이 경우에는 Nick이 제공한 코드가 작동합니다.

더 많은 프로젝트 간 공유에 대해:나는 컨트롤이 논리(예: WebForms 컨트롤)가 있는 "재사용 가능한 코드 구성 요소"라기보다는 웹 사이트 전체에서 공유할 수 있는 "재사용 가능한 HTML 렌더링 구성 요소"에 더 가깝다고 생각합니다.웹 로직은 HTML 컨트롤이 아닌 페이지 컨트롤러에 있어야 합니다.따라서 더 많은 프로젝트에서 컨트롤을 공유하는 것은 WebForms의 경우만큼 유용하지 않습니다.

MVC는 사용자 컨트롤과 비교하여 페이지 수명주기가 다릅니다.

이것을 다시 작성하는 것을 고려할 수 있습니다.

aspx는 보다.여전히 다시 작성해야 하며 구문이 다릅니다.자바스크립트가 작동합니다.그러나 나는 WebControls가 작동하지 않을 것이라고 생각합니다.MVC에는 더 이상 viewstate와 postback이 없기 때문입니다.

뒤에 있는 코드(aspx.cs)의 경우 이를 다음으로 변환해야 합니다. 제어 장치 수업.Page_Load 방법은 더 이상 작동하지 않습니다.아마 맡기실 것 같아요 Index() 방법.

모델 단순히 코드 뒤에 사용되는 엔터티 클래스입니다.

결론은 전체 재작성입니다.건배.즐거운 코딩하세요.

네, RenderPartial을 할 수 있습니다.좋은 시작이네요.하지만 결국 이 사람들에게는 로직과 기타 컨트롤러 유형이 필요할 것입니다.프레임워크 팀에서 하위 컨트롤러 구현을 찾아보세요.MvcContrib에도 곧 뭔가가 있을 것입니다.아니면 직접 굴려보세요.

편집하다: 방금 여기에 대해 게시했습니다. http://mhinze.com/subcontrollers-in-aspnet-mvc/

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