2010-08-10 8 views
1

테이블에 추가 할 각 텍스트 상자에 고유 한 이름을 추가하려고합니다.C에서 동적으로 생성 된 웹 컨트롤의 이름을 지정하고 찾는 방법 #

이 나는 ​​시도했다 :있는 HTML이 생성

TableRow someRow = new TableRow(); 
TableCell someCell = new TableCell(); 
TextBox someTextbox = new TextBox(); 

someTextbox.Attributes.Remove("name"); 
someTextbox.Attributes.Add("name",itsId); 

someCell.Controls.Add(someTextBox); 
someRow.Cells.Add(someCell); 
theTable.Rows.Add(someRow); 

내 이름과 텍스트 상자의 속성과 자동 생성 된 이름을 모두 포함한다.

불행히도 FindControl을 내 이름으로 실행하면 자동 생성 된 이름으로 찾을 수 있지만 null 참조가 나타납니다.

내 이름으로 컨트롤을 찾으려면 어떻게해야합니까? 언제/왜 내 컨트롤 이름을 자동 생성합니까?

성공 코드 :

TextBox tb = (TextBox)FindControl(autogeneratedID); 
WriteToSomeOtherDiv(tb.Text); 

실패 코드 :

TextBox tb = (TextBox)FindControl(myId); 
WriteToSomeOtherDiv(tb.Text); 

+0

코드를 게시 할 수 있습니까 - 실패한 사례와 후속 사례 모두 게시 할 수 있습니까? – ChrisF

답변

1

그것은 ASP.Net의 버전에 따라 달라집니다. 역사적으로 당신은 이드와 컨트롤의 이름을 제어 할 수 없었습니다. ASP.Net 4.0에서는이 변경되었습니다. ID의 렌더링 방법을 제어 할 수 있습니다. 왜이 기능을 사용하지 않습니까? http://www.dotnetfunda.com/articles/article893-control-over-client-ids--aspnet-40-.aspx

당신이 이름 속성을 대상으로하는 이유가 있습니까 : 여기

닷넷 4.0의 새로운 기능에 대한 기사입니다?

이전 버전 (3.5)을 사용하는 경우 쉽지 않습니다. FindControl은 이름이 아닌 컨트롤의 ID 만 찾습니다.

+0

대신에 attributes.add ("id", itsId)를 사용하여 id를 설정하면 작동하지 않습니다. 그러나 someTextBox.ID = itsId를 설정하면 생성 된 HTML에서 "name"속성이 이름과 동일한 값을 갖습니다. – scott

0

컨트롤을 자리 표시 자에 배치하고 양식 대신 자리 표시자를 찾아야하는 것처럼 보입니다. 사용자 정의 컨트롤과 동적 컨트롤을 제거하고 추가하는 방법에 대한 아래의 예를 참조하십시오. 컨트롤을 찾기 전에 컨트롤을 먼저 찾아야합니다. 전체 설명은 내 블로그에 있습니다 ->http://anyrest.wordpress.com/2010/04/06/dynamically-removing-controls-in-a-parent-page-from-a-child-control/. 이 문제가 해결되었는지 알려주세요.

public UserControl myCustomControl = new UserControl(); 
public Button myDynamicButton = new Button(); 

protected void btnAddControl_Click(object sender, EventArgs e) 
{ 
    myCustomControl = (UserControl)Page.LoadControl("SampleControlToLoad.ascx"); 
    PlaceHolder myPlaceHolder = (PlaceHolder)Page.FindControl("PlaceHolder1"); 

    myPlaceHolder.Controls.Add(myCustomControl); 
} 
protected void btnRemoveControl_Click(object sender, EventArgs e) 
{ 
    PlaceHolder myPlaceHolder = (PlaceHolder)Page.FindControl("PlaceHolder1"); 
    if (myPlaceHolder.Controls.Contains(myCustomControl)) 
    { 
     myPlaceHolder.Controls.Remove(myCustomControl); 
     myDynamicButton.Dispose(); 
    } 
}