2009-07-29 5 views
0

특정 페이지가 있으며 관리자 역할에 따라 많은 추가 유효성 검사 컨트롤을 삽입해야합니다. 그러나 나는 유효성 검사기가 다른 사용자를 위해 켜지는 위험을 감수하고 싶지 않습니다.마스터 페이지가없는 ASP.NET의 시각적 상속

"시각적 상속"의 어떤 형식을 사용하는 것이지만 어떤 경로를 선택해야할지 모르겠습니다. 아마도 같은 클래스 (페이지에서 상속)에서 상속하는 .aspx 별도의 페이지가 있을까요?

사이드 노트 : 이것은이 아닌 웹 폼에서 이루어져야합니다.

추가 정보 : 내가 해결하려고하는 문제는 페이지를 복제 할 필요없이 두 가지 모두에서 변경 사항을 유지하면서도 역할이 분리되고 페이지에 미치는 영향입니다. 바닐라 페이지를 볼 수있는 클라이언트가 있으며 관리자는 동일한 정보를 볼 수 있지만 추가 된 유효성 검사 컨트롤을 볼 수 있습니다. 그러나 이러한 유효성 검사는 고객이 볼 수 없습니다. 또한 좀 더 많은 정보를 볼 수 있지만 특정 사용자 컨트롤의 역할 기반보기를 사용하여 처리 할 수 ​​있습니다.

누구나 이것에 대한 아이디어가 있습니까?

+1

마스터 페이지는 ASP.NET에서 올바르게 작동하는 유일한 시각적 상속입니다. –

답변

2

왜 마스터 페이지를 사용하지 않으시겠습니까? 마스터 페이지는 원하는 작업을 정확하게 수행합니다. 심지어는 서로 상속 할 수도 있습니다 (말하기 방식으로).

나는 당신이 원하는 것을하기 위해 master pages을 사용할 것을 제안합니다.

ASP.NET 마스터 페이지 에 당신이 당신의 응용 프로그램에서 페이지에 대한 일관된 레이아웃을 만들 수 있습니다. 하나의 마스터 페이지는 응용 프로그램에서 모든 페이지 (또는 페이지 그룹)에 대해 모양과 느낌을 표준 동작으로 정의하고 을 지정합니다. 을 입력하고 표시 할 콘텐츠가 포함 된 개별 콘텐츠 페이지 인 을 만들 수 있습니다. 사용자가 콘텐츠 페이지를 요청하면 마스터 페이지와 병합되어 페이지의 콘텐츠가 콘텐츠의 콘텐츠 인 마스터 페이지의 콘텐츠와 결합됩니다.

+0

우리는 또한 그것에 대해 생각하고 있었지만 그 경우 문제는 콘텐츠 페이지의 위치로 이동합니다. 또는 텍스트 상자가 마스터 페이지에 있고 필요한 경우 유효성 검사기가 콘텐츠 페이지에 배치된다는 것을 의미합니까? 우리는 우리 페이지에서 100 개가 넘는 컨트롤을 가지고 있으며, 그리드 /리스트 뷰는 어떨까요? 나는 이것이 노고 해결책이라고 생각한다. –

+0

저는 이해가 안됩니다 - 해결하려는 문제는 무엇입니까? 어떻게하면 더 잘 해결할 수 있을까요? –

+0

조금 더 명확하게 설명하기 위해 몇 가지 추가 정보를 추가했습니다. –

0

종종 이러한 문제는 페이지를 사용자 컨트롤 (.ascx)로 나누어 해결할 수 있습니다. 좀 지저분해질 수 있지만 일을 끝내게됩니다.

페이지의 상속은 가능하지만 어렵습니다. 반드시 .aspx 페이지 하나가 다른 .aspx 페이지에서 상속받을 수 없다는 것을 인식해야합니다. ASP.NET 컴파일러의 작동 방식 때문입니다. .aspx XML 마크 업은 코드 숨김 클래스에서 파생 된 클래스로 컴파일됩니다. 런타임에만 발생하기 때문에 코드 숨김을 컴파일 할 때 클래스가 존재하지 않기 때문에 다른 .aspx 페이지에서 상속받을 수 없습니다.

페이지에서 상속하는 다른 클래스를 만들고 .aspx 코드 숨김 클래스가 그 클래스에서 상속되도록 만들 수 있습니다. 이 클래스는 .aspx XML 부분을 가지지 않으므로 모든 컨트롤을 직접 인스턴스화하고 속성을 할당해야합니다. 대부분의 경우 이것은 상당히 엉망이됩니다.

2

해결하려는 문제가 역할 기반 컨트롤보기이고 내장 ASP를 사용하고있는 경우.net 멤버십/역할 공급자를 사용하면 LoginView 컨트롤을 사용하여 관리자 항목의 가시성을 관리 할 수 ​​있습니다.

<asp:LoginView runat="server" ID="LoginView"> 
    <RoleGroups> 
     <asp:RoleGroup Roles="Admin"> 
      <ContentTemplate> 
       Special Admin content 
       <asp:RequiredFieldValidator></asp:RequiredFieldValidator> 

      </ContentTemplate> 
     </asp:RoleGroup> 
    </RoleGroups> 
</asp:LoginView> 
+0

이러한 컨트롤이 100 개일 때 성능과 가독성이 크게 저하되지 않습니까? –

+0

성능이 현재 문제입니까? 그렇다면 병목은 대조군의 생성과 관련이 있습니까? LoginView 컨트롤은 매우 가볍습니다. 관리자 콘텐츠를 숨기거나 표시하는 논리는 어딘가에 있어야합니다. 선언적 컨트롤을 사용하면 코드 숨김과는 반대로 시각적으로 자신을 표현할 수 있습니다. 100 번 표현하면 분명히 약간 장황하다. 숨기기/표시하려고하는 유효성 검사기 컨트롤의 기본 속성 외에도 role 속성을 표시하는 사용자 지정 서버/사용자 컨트롤 래퍼를 만들어 loginview 컨트롤을 건너 뛸 수 있습니다. – HectorMac

+0

나는 그 커스텀 컨트롤 접근법을 좋아한다. 필요에 맞는 지 확인하기 위해 조금 더 자세히 살펴 보겠습니다. –

관련 문제