2011-01-19 10 views
0

전체 사이트에 대해 한 페이지 밖에없는 페이지가 있습니다.마스터 페이지에서 유일한 페이지의 공용 페이지 변수에 어떻게 액세스합니까?

using System; 
using System.Text.RegularExpressions; 
using System.IO; 
using System.Collections.Generic; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 
using System.Data.SqlClient; 

public partial class CMSPageViewer : System.Web.UI.Page 
{ 
    public int myPageID; 

    protected void Page_PreInit(object sender, EventArgs e) 
    { 
     // Get stuff from the database 

     myPageID = 1; 

     // Set the Page.MasterPageFile 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     // Fill in the page contents 
     // This looks for and fills in asp:ContentPlaceHolder controls based on ID 
    } 
} 

그리고 마스터 페이지 :

using System; 
using System.Collections.Generic; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class Standard_Page : System.Web.UI.MasterPage 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     int myID = (this.Page as CMSPageViewer).myPageID; 
    } 
} 

사용 된 마스터 페이지에서 ID에 어떻게 액세스합니까?

페이지 캐스팅이 작동하지 않는 것 같습니다. 다음과 같은 오류가 발생합니다 :

Compiler Error Message: CS0246: The type or namespace name 'CMSPageViewer' could not be found (are you missing a using directive or an assembly reference?) 
+0

CMSPageViewer는 App_Code 또는 일부 클래스 라이브러리에서 정의 된 "실제"클래스 (부분 .aspx가 아닌 부분) 여야합니다. –

답변

2

마스터 페이지에 변수를 정의하십시오. 적절한 getter/setters를 제공하십시오. 각 페이지에서 master.setter를 호출하고 마스터 페이지로 "변수 전달"합니다.

적어도 당신은 잘못 될 것이지만 이것은 당신이해야하는 일입니다.

Page이 해석되는 것을 기초로 Master 속성을 수정하려면 5 장 255 - 260 페이지에서 "ASP.NET 3.5 Unleashed"http://www.amazon.com/dp/0672330113 섹션을 참조하십시오. 다시

, 참조하는 ASP.NET 시작합니다 3.5 해방 제 6 장 : 두 함께 작동 그래서 다른 말로하면, 당신이 테마로 마스터 페이지를 사용 안하고

Themes are different than Master Pages. A Master Page enables you to share content across multiple pages in a website. A Theme, on the other hand, enables you to control the appearance of the content.

.

계속 가고 싶습니까? 나는 다른 책이 몇 권있다. 나는 당신이하려고하는 것을 정확히했습니다 (내용에 따라 마스터를 수정하십시오). 그리고 그것이 해킹임을 알았을 때,해야만했기 때문에 그것을했습니다. 그래서 내가 말한 것은 내가 한 일입니다. 그것은 작동하는 것입니다.

이제 다시 말씀 드리지만 내가 할 수는 없다고 말해주십시오. 마스터에서 페이지로 전송할 수없는 이유를 설명하는 참고 자료를 찾아 보겠습니다. (가), 참조 책 내 선반에 때려 마련하고자하는 사람들을 위해


은 실제 계약을 얻는 사람들이 재생 방법은, 큰 소년이 연주하는 그건 있습니다, 그것은 당신이 당신의 통보 방법 보스. 책이에요. 그것이 바로 그들이 원하는 것입니다. 또한 Stephen Walther는 아무도 아니며 ASP.NET 팀의 수석 제품 관리자였습니다. 그래서 그는 그가 무슨 말을하고 있는지를 압니다. 나는 그의 충고를 경청했다. 지옥, 나는 그의 책을 사지 않았다?

+0

이것은 내가 묻는 것과는 정반대입니다. 마스터 페이지는 테마입니다. 한 사이트에 3-4 개의 마스터 페이지가있을 수 있으며 각 사이트에는 마스터 페이지가 있습니다. 100 번 중 99 번은 마스터 페이지가 페이지 자체에 대해 알 필요가 없습니다. 마스터 페이지가 작동하도록하는 특별한 요구 사항은 없습니다. 가능한 모든 마스터 페이지에 메소드/변수가 필요하지는 않지만 필요하지 않습니다. 이것이 내가 묻는 이유입니다 ... 어떻게 마스터 페이지가 페이지의 변수에 액세스 할 수 있습니까? – Justin808

+0

당신이 묻는 것의 반대가 아니며, 마스터 페이지가 내부 페이지가하는 일을 알 수있는 방법을 요구하고 있습니다. 모든 페이지가 동일한 유형을 가질 것이라고 가정 할 수 없습니다. (@cybernate가 제안하는 것을 수행하는 경우 캐스팅해야합니다.) ... 텍스트 참조 (일명 a book) – jcolebrand

+0

마스터 페이지는이 ID를 가져 오는 논리를 포함하는 기본 마스터 클래스에서 상속해야합니다. 그렇다면 논리가 중복되지 않도록이 기본 클래스에서 상속받은 수많은 주제를 가질 수 있습니다. –

0

을이 :

(this.Page as CMSPageViewer).ID 
+0

컴파일러 오류 메시지 : CS0246 : 형식 또는 네임 스페이스 이름 'CMSPageViewer'를 찾을 수 없습니다 (사용 지시문 또는 어셈블리 참조가 누락 되었습니까?) – Justin808

+0

위의 CMSPageViewer의 전체 네임 스페이스를 추가하십시오. –

+0

네임 스페이스에서 아무 것도 랩핑되지 않습니다. "기본"네임 스페이스는 무엇입니까? – Justin808

2

내가 디자인을 싫어하지만, 응용 프로그램에서 단 하나의 페이지가있는 경우, 다음이 더 많이 만들 시작 감각.

실제로 이것은 마스터 페이지가 아닌 것입니다. 이것은 테마가있는 것입니다.

+0

내 사이트의 모든 페이지에 CMSPageViewer가 사용되었습니다. CMSPageViewer는 모두 데이터베이스에서 채워졌습니다. 마스터 페이지는 코드로 설정되며 페이지 설정에 따라 다를 수 있습니다. CMSPageViewer 페이지에서 유일하게 안정적인 항목입니다. 그래서 마스터 페이지에서 액세스해야하는 페이지 ID가 있다면 CMSPageViewer 클래스에서 가져와야합니다. – Justin808

+0

@Justin : 아직까지는 꽤 구플처럼 보입니다. –

+1

@ Justin808 - 이것이 최고의 디자인이 아니라는 것에 동의합니다. 마스터 페이지에서 Id를 아는 것이 요구되는 경우 마스터 페이지는 페이지를 가져 오는 작업을 수행해야하며 페이지에서 해당 작업을 수행 한 다음 거기에서 액세스해야합니다. 이것은 잘못된 방향입니다. –

-2

페이지와 마스터 페이지 모두에서 액세스 할 수있는 세션 변수를 사용할 수 없습니다.

+0

은 전체 OO 원칙을 위반하는 것입니다. –

+1

하지만 전체 상황에 대해 너무 과장된 것은 무엇입니까? 적어도 오용되지 않는다면 데이터에 접근하는 더 깨끗한 방법 – Divi

관련 문제