콘텐츠 페이지에서 마스터 페이지의 .Net 요소에 액세스하는 방법은 무엇인가요?

마스터 페이지의 '콘텐츠플레이스홀더'에 로드된 페이지에서 마스터 페이지의 요소에 액세스할 수 있나요?

마스터 페이지의 탐색 영역에 사람의 이름을 나열하는 ListView가 있습니다. ListView가 데이터 바인딩된 테이블에 사람이 추가된 후에 ListView를 업데이트하고 싶습니다. 현재 ListView는 캐시가 다시 로드될 때까지 값을 업데이트하지 않습니다. ListView.DataBind()를 다시 실행하면 목록 뷰의 내용이 업데이트되는 것을 발견했습니다. 마스터 페이지를 사용하는 페이지에서ListView.DataBind()`를 실행할 수 없습니다.

아래는 내가 하고 싶었던 작업의 샘플이지만 컴파일러 오류는 다음과 같이 말합니다.

"현재 컨텍스트에 PeopleListView가 존재하지 않습니다.

GIS.master - ListView가 있는 위치

...<asp:ListView ID="PeopleListView"...

GISInput_People.aspx - 마스터 페이지로 GIS.master를 사용합니다.

GISInput_People.aspx.cs

AddNewPerson()
{
    // Add person to table
    ....

    // Update Person List
    PeopleListView.DataBind();
    ...
}

C# .Net에서 이와 같은 문제를 해결하는 가장 좋은 방법은 무엇인가요?

해결책

이 마스터 페이지의 구조에 대해 콘텐츠 페이지가 너무 많은 것을 알고 있어야 하기 때문에 this.Master.FindControl 또는 이와 유사한 것을 사용하여 이 작업을 수행할 수 있다고 생각하지만 그렇게 해서는 안됩니다.

마스터가 이벤트를 수신하고 실행될 때 다시 바인딩할 수 있는 콘텐츠 영역에서 이벤트를 실행하는 것과 같은 다른 방법을 제안하고 싶습니다.

해설 (0)

마스터 페이지에서 컨트롤의 이름이 라고 가정합니다.

ListView peopleListView = (ListView)this.Master.FindControl("PeopleListView");
peopleListView.DataSource = [whatever];
peopleListView.DataBind();

그러나 특히 페이지에 마스터 페이지가 두 개 이상 있을 수 있는 경우에는 @palmsey이 더 정확합니다. 이들을 분리하고 이벤트를 사용하세요.

해설 (0)

옵션 1 너 공물 마스터 페이지에 제어입니다 만들 수 있다.

public TextBox PropMasterTextBox1
{
    get { return txtMasterBox1; }
    set { txtMasterBox1 = value; }
}

이 같은 내용에 대해 액세스하면 페이지

Master.PropMasterTextBox1.Text="SomeString";

옵션 2: 마스터 페이지:

public string SetMasterTextBox1Text
{  
    get { return txtMasterBox1.Text; }
    set { txtMasterBox1.Text = value; }
}

컨텐츠에 대한 페이지:

Master.SetMasterTextBox1Text="someText";

옵션 3: 몇몇 공공 만들 수 있는 방법을 잘 어울려

그러나 이러한 외곽진입 그리 유용한 경우 제한적으로 사용할 수 있도록 미리 정의된 제어 및 그냥

해설 (3)

다음 (ASP.NET) 는 한 너희에게베풀어진 같아 디렉티브을.

MSDN 참조

이 참조할 때 도움이 된다. 마스터에는 강하게 만들어 입력되었는지 참조입니다 마스터야 호출이네요 그런 다음 목록보기 참조할 필요가 없는 인간.

해설 (0)

이 코드를 통해 액세스할 수 있습니다. 프로파일링하려는 제어하는 마스터스핀드콘트럴 (콘트로이드). 이 참조가 되돌려줍니다 제어입니다 도왔으매 변경 사항이 효과적이다. 사격에 대한 각 이벤트가 불가능했을 것이다.

해설 (0)

마스터 페이지의 이름이 MyMaster라고 가정합니다:

(Master as MyMaster).PeopleListView.DataBind();

편집: PeopleListView는 기본적으로 비공개로 선언되므로 이를 공개로 변경하거나 공개 속성 래퍼를 만들어 페이지에서 액세스할 수 있도록 해야 합니다.

해설 (0)