2009-11-07 4 views
5

죄송합니다. 기본 질문 인 경우 페이지 프레임 워크에서 ASP.NET MVC로 정신적 전환을하는 데 문제가 있습니다.ASP.NET MVC에서 사용자 컨트롤 캡슐화

페이지 프레임 워크에서 저는 종종 ASCX 파일을 사용하여 사이트의 여러 위치에서 inclded되는 작은 캡슐화 된 청크를 만듭니다. 페이지를 만들 때 이러한 컨트롤 중 하나가 필요합니다. 단지 참조를 추가하면 모든 것이 제대로 작동합니다.

내가 알 수있는 한, MVC에서 ASCX 파일은 부분적으로 보기입니다. 즉, 이러한 기능 단위 중 하나를 추가하고 싶을 때 ASCX에서 관련 ViewData를 사용할 수 있도록 컨트롤러의 동작 메서드에 코드를 추가해야합니다.

이 경우에는 나에게 조금 뒤떨어져있는 것처럼 보입니다. 예를 들어, 마스터 페이지를 사용하는 모든 컨트롤러에 코드를 추가하지 않고 컨트롤을 마스터 페이지로 '드롭'할 수 없다는 것을 의미합니다!

나는 뭔가를 놓친 것 같아요 - 어떤 도움을 주시면 감사하겠습니다.

감사합니다, - 크리스

지금까지 내가 말할 수있는
+0

이 블로그를 읽는 모든 독자가 asp.net 또는 mvc의 전문가 인 것은 사실이 아니기 때문에 미안하다고 말하지 마십시오 –

+0

질문 문법에 +1을 입력하면 내 질문을 편집 한 다음 내 프로필로 이동합니다. 나는 영어로 좋은 지식을 가지고 있지 않다 –

답변

3

는 MVC에서 ASCX 파일은 단지 부분이다. 이 내가 원하는 어디든지 ASCX 사용할 수 나는 또한 가 확인 관련을 ViewData를 만들기 위해 컨트롤러의 액션 메서드에 일부 코드를 추가해야 할 기능이 장치 중 하나 입니다 를 추가하는 것을 의미합니까?

예.

그러나, 대신 RenderPartial의보기에 RenderAction 방법을 사용할 수 있습니다, 당신의 모든 기능 캡슐화됩니다 (데이터가 하위보기로 전달되는 포함).

즉, 기본보기 내에서 한 줄의 코드로 호출 할 수있는 컨트롤러 메서드,보기 데이터 및 부분보기가 통합 된 작은 패키지가 만들어집니다.

+0

Excellent - RenderAction은 내가 놓친 퍼즐 조각이다! 많은 감사! –

+0

또한이 게시물을 http://blog.codeville.net/2008/10/14/partial-requests-in-aspnet-mvc/에서보실 수 있습니다. – joshperry

+0

다음은 RenderAction에 대한 개요입니다. http://blogs.intesoft.net/post/2009/02/renderaction-versus-renderpartial-aspnet-mvc.aspx –

1

부분 뷰를 렌더링하고 모델 객체를 전달할 수 있습니다. 당신의 부분보기에서

<% Html.RenderPartial("MyPartial", ViewData["SomeObject"]); 

(의 .ascx) 파일, 당신은 당신이 그 물체에 필요한 무엇이든 할 수있는 "모델"개체 (당신이 당신의 @ 제어 감속 적절한 객체를 상속 한 가정)를 사용할 수 있습니다 .

부분 뷰의 텍스트를 전달하고 모델링 한 후 원하는 위치에 놓을 수 있습니다.

기본보기 (.aspx 파일)에서 부분보기로 전달할 ViewData에서 적절한 개체를 정의해야합니다. 당신이 할 수있는

또 다른 방법은 사용하는 것입니다 :

<% Html.RenderAction("MyAction", "MyController", new { Parameter1="Value1"}) %> 

어떤 이전 방법이하는 일은, 컨트롤러 액션을 호출의 응답을, 당신은 방법 "() RenderAction을"이라는 곳에 놓습니다이다.컨트롤러 액션에 대한 요청을 실행하고 응답을 읽는 것과 동일합니다 (응답을 다른 파일에 배치하는 경우는 제외).

Google "renderaction and renderpartial"에서 추가 정보를 얻을 수 있습니다.

+0

우수 - RenderAction은 내가 놓친 퍼즐 조각입니다! 많은 감사! –

2

귀하의 질문에 이미 답변되었지만, 완벽을 기하기 위해 가끔 매력적일 수있는 또 다른 옵션이 있습니다.

ASP.NET MVC에서 "컨트롤"이 어떻게 숨겨진 지 보셨습니까? 그것들은 "HtmlHelper"의 메소드입니다.

<%= Html.Textbox("FirstName") %> 

을 그리고 당신은 많은 표준 컨트롤을 위해 그런 일을 가지고 : 당신이 "FIRSTNAME"에 바인딩 된 텍스트 상자를 원하는 경우, 예를 들어, 당신은 할 수 있습니다.

당신이 할 수있는 일은 그런 방법을 직접 만드는 것입니다. 자신 만의 방법을 만들려면 다음과 같이 Html 헬퍼 클래스 상에 확장 메서드을 만들어야합니다 :

public static class HtmlHelperExtensions 
{ 
    public static string Bold(this HtmlHelper html, string text) 
    { 
     return "<b>" + text + "</b>\n"; 
    } 
} 

그런 다음보기에,이 클래스의 정의를 포함하는 네임 스페이스를 연 후, 당신은 다음과 같이 사용할 수 있습니다 :

<%= Html.Bold("This text will be in bold-face!") %> 

글쎄, 이것은별로 유용하지 않습니다. 그러나 당신은 매우 흥미로운 일을 할 수 있습니다. 내가 자주 사용하는 메서드는 열거 형을 사용하고이 열거 형의 값 (예 : enum Gender { Male, Female } 및보기에 Gender: <%= Html.EnumDropDown(Model.Gender) %>과 같은 값)이있는 드롭 다운 목록을 만드는 메서드입니다.

행운을 빈다.