마스터 페이지의 '콘텐츠플레이스홀더'에 로드된 페이지에서 마스터 페이지의 요소에 액세스할 수 있나요?
마스터 페이지의 탐색 영역에 사람의 이름을 나열하는 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에서 이와 같은 문제를 해결하는 가장 좋은 방법은 무엇인가요?
마스터 페이지에서 컨트롤의 이름이 <사람 목록 보기>라고 가정합니다.
ListView peopleListView = (ListView)this.Master.FindControl("PeopleListView");
peopleListView.DataSource = [whatever];
peopleListView.DataBind();
그러나 특히 페이지에 마스터 페이지가 두 개 이상 있을 수 있는 경우에는 @palmsey이 더 정확합니다. 이들을 분리하고 이벤트를 사용하세요.
옵션 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: 몇몇 공공 만들 수 있는 방법을 잘 어울려
그러나 이러한 외곽진입 그리 유용한 경우 제한적으로 사용할 수 있도록 미리 정의된 제어 및 그냥
마스터 페이지의 이름이 MyMaster라고 가정합니다:
(Master as MyMaster).PeopleListView.DataBind();
편집: PeopleListView는 기본적으로 비공개로 선언되므로 이를 공개로 변경하거나 공개 속성 래퍼를 만들어 페이지에서 액세스할 수 있도록 해야 합니다.