2011-03-09 5 views
1

나는 라벨 및 드롭 다운에 일부 자바 스크립트가 포함 된 일련의 레이블과 드롭 다운이 포함 된 테이블 컨트롤을 즉석에서 만듭니다. .동적 컨트롤을 추가 할 때 현재 컨텍스트에서 ContentPlaceHolder의 ClientID를 확인하십시오.

Dim dd As New DropDownList 
    Dim ds As System.Data.DataTable = GetTable("EmployeePosition") 
    Dim prefix As String = "Position" 
    dd.ID = prefix & i 
    dd.DataSource = ds 
    dd.DataValueField = "PositionID" 
    dd.DataTextField = "PositionName" 
    dd.Attributes.Add("onchange", "checkDuplication(this,'" & prefix & "');") 
    dd.DataBind() 

자바 스크립트 함수 "onchange를 '는 드롭 다운 중 임의의 값이 동일한 경우 프리픽스와 검사로 시작하는 모든 드롭을 통해 제어 루프.

이 테이블은 내 마스터 페이지에있는 ContentPlaceHolder 컨트롤에 포함 된 PlaceHolder 컨트롤에 추가됩니다. 이 자바 스크립트를 포함 특히, 마스터 페이지 및 ContentPlaceHolders에 배치 할 때

Master_Content1_Position1 

내가 reoccuring이 문제는 컨트롤의 이름을 자동으로 지정합니다.

제가 지금까지 생각해 낸 최고의 해결책은 PlaceHolder를 포함하고있는 ContentPlaceHolder를 찾고 ClientID를 검색 한 다음 해당 값을 테이블 작성자에게 전달하는 것입니다.

 Dim cph As ContentPlaceHolder = Me.Master.FindControl("Content1") 
     Dim tbl As Table = New PositionTable(cph.ClientID).ToTable 
     PlaceHolder1.Controls.Add(tbl) 

그래서 나는 가리 키도록 자바 스크립트 기능을 앞에 내 표 작성자에게이 값을 전달할 수 있습니다 현재의 ContentPlaceHolder 컨트롤 또는 자리에서 무엇을 결정하고, 클라이언트 ID 또는에서 UniqueID를 반환하는 방법이 있나요 요소 ID를 사용하여 오른쪽 컨트롤? 가급적이면 기준 값으로 채워지는 PlaceHolder 또는 Control을 사용합니까?

감사합니다.

답변

2

컨트롤 클래스의 Parent 속성을 사용할 수 있습니다. 컨트롤이 첫 번째 자식 인 경우 ContentPlaceHolder 컨트롤이 반환됩니다. 그렇지 않다면 부모의 부모 (등)를 데리고 ConterPlaceHolder인지 확인하십시오 :

private ContentPlaceHolder GetParentContentPlaceHolder() 
{ 
    Control nextParent = this.Parent; 
    while (nextParent != null) 
    { 
     ContentPlaceHolder parentContentPlaceHolder = nextParent as ContentPlaceHolder; 
     if (parentContentPlaceHolder != null) 
     { 
      return parentContentPlaceHolder; 
     } 

     nextParent = nextParent.Parent; 
    } 

    return null; 
} 
관련 문제