2011-10-28 2 views
13

Web Form ascx 사용자 정의 컨트롤 (비 MVC)을 사용하는 MVC Razor _Layout.cshtml 페이지를 구현하려고합니다. 이 Scott Hansleman의 기사 "ASP.NET MVC 3을 사용하여 면도기 뷰와 WebForms 마스터 페이지 믹싱"의 "예"섹션을 기반으로이 작업을 수행하고 있습니다.이 기사에서는 두 가지 모두에서 동일한 ascx User Control을 사용하는 방법에 대해 설명합니다. webform Site.Master 페이지뿐만 아니라 MVC Razor _Layout 페이지.MVC Razor보기에서 레거시 ASP.NET ASCX 사용자 정의 컨트롤 사용

내가 읽은 바로는 elsewhere on Stackoverflow에서 MVC 페이지의 레거시 ascx 사용자 컨트롤 (ASP.NET 웹폼 서버 컨트롤은 물론)을 사용할 수 있습니다. 그러나

@{ Html.RenderPartial("~/UserControls/WebUserControl1.ascx"); } 

, 오류 발생 :

The view at '~/UserControls/WebUserControl1.ascx' must derive from ViewPage, 
ViewPage<TModel>, ViewUserControl, or ViewUserControl<TModel>. 

나는 또한 유사한 결과를 아래 시도 :

@Html.Partial("~/UserControls/WebUserControl1.ascx") 
를 다음 줄을 사용하여 내 면도기 _Layout의 ASCX 사용자 컨트롤을 렌더링한다

여기에 무엇이 누락 되었습니까?

답변

3

ASP.Net MVC에서 기존 ASP.Net usercontrols (포스트 백 및 ViewState 포함)를 사용할 수 없습니다.

Html.Partial은 동일한보기를 사용하지만 부분적으로보기를 렌더링 할 수 있지만 동일하지는 않습니다.

+3

사용자가 ViewUserControl을 상속 받도록 UX를 업데이트하는 한 오해의 소지가 있습니다 ... http : //stackoverflow.com/questions/6538869/mvc3-razor-is-it-possible-to-render-a- 레거시 - ascx –

+4

@ BobTodd : "고전적인 ASP.Net usercontrols"로, 나는 포스트 백과 ViewState, 작동하지 않습니다 의미합니다. – SLaks

15

오류 메시지가 표시 될 때 사용자 컨트롤은 "ViewUserControl"에서 파생되어야합니다. 사용자 제어를위한 파일 뒤에 코드에서, 단순히이를 변경 ...

public partial class WebUserControl1 : UserControl 
{ 
    // ... 
} 

을 ... 여기에 :

public partial class WebUserControl1 : ViewUserControl 
{ 
    // ... 
} 

ViewUserControl 상속을 UserControl에서, 그것은 당신이 기존에 계속 사용할 수 있도록 WebForms 페이지.

MVC에서 사용자 정의 컨트롤을 사용하려면이 외의 다른 문제를 처리해야 할 수도 있습니다. (SLaks에 의해 언급) I가 발생했음을 다른 적어도 하나

Control 'controlId' of type 'controlType' must be placed inside a form tag with runat=server.

이 같은 물건을 발견하면, 당신은 창조적해야 할 것입니다. WebForms와 MVC 모두에서 행복하게 살 수 있도록 사용자 정의 컨트롤을 수정하거나 (문제의 컨트롤을 모든 일반적인 의미의 HTML 컨트롤로 대체) 또는 WebForms 버전과 MVC 버전이되도록 복제하십시오.

예를 들어 <asp:TextBox ID="search"><input type="text" name="search" />으로 바꿔야합니다. 즉, 해당 입력에서 오는 값을 처리하는 서버 측 코드도 수정해야합니다. 기본적으로 사용자 컨트롤을 중성화해야하며, 뷰 렌더링 로직 인 포스트 백 처리 로직을 구현하는 데 사용 된 것을 뷰를 렌더링하는 것으로 변환해야합니다.

당신

웹폼과 면도기 MVC 모두 잘 하나 ascx 제어 플레이를 할 수 있으며, 페이지 머리글과 바닥 글 또는 데이터의 읽기 전용 뷰와 같은 단순한 것들에 대한이 MVC에 응용 프로그램을 마이그레이션하기위한 좋은 방법입니다.그러나 입력 양식과 같은 더 복잡한 작업의 경우 ascx 사용자 정의 컨트롤과 MVC 면도기 뷰를 모두 유지하는 것이 더 쉬울 것입니다. 당신은 기본적으로 다음과 같은 방법으로 MVC에

1 변경 사용자 컨트롤 상속이 asp.net 사용자 컨트롤을 사용할 수 있습니다

8

기본 :

public partial class TestControl: UserControl 
{ 
// ... 
} 

변화 :

public partial class TestControl: ViewUserControl 
{ 
// ... 
}` 

양식 태그 및 scr 내에서 asp.net 컨트롤을 사용하는 두 번째 사용자 컨트롤 IPT 매니저는 경우,

@{ Html.RenderPartial("~/UserControls/TestControl.ascx"); } 

은 어떤 문제없이 작동해야하고 MVC로 이전 asp.net 웹 사이트를 변환 도움이 될 것 같은 MVC보기에

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestControl.ascx.cs" Inherits="TestApp.UserControls.TestControl" %> 

<div> 
<h1>Welcome Test User Control</h1> 
<form id="test" runat="server"> 
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 
<asp:TextBox runat="server" ID="txtbxTest" Text="Hello"> 

</asp:TextBox> 
</form> 
</div> 

3 전화 사용자 컨트롤을 호출해야한다 오래된 웹 사이트는 MVC의 새로운 기술로 쉽게 업그레이드 할 수있는 사용자 컨트롤이 있습니다.

+0

MVC와 함께 asp.net userconrol을 사용할 때 가장 좋은 솔루션입니다. –

관련 문제