이 가능한 중복은 :
.Net Changes the element IDsASP.net 서버 컨트롤 : 동적 컨트롤
나는 다음과 같은 문제가 (나는 간단하게 설명 할 것이다, 그렇지 않으면 때문에 너무 복잡해 지거나 길어진다).
Panel에서 상속 된 ASP.net 서버 컨트롤을 만들어야합니다. 충분히 간단합니다. 사용자 정의 컨트롤이 렌더되면 동적으로 Button을 만들고 이벤트 핸들러를 서버 컨트롤에 연결하고 렌더링 된 컨트롤에이 버튼을 추가해야합니다. 서버 컨트롤 내부에 정의 된 click 이벤트 핸들러는 잠시 동안 재미 있지 않은 일부 작업을 수행합니다.
이미 예제를 코딩 했으므로 정상적으로 작동합니다. 서버 컨트롤의 생성자에서 새 단추 컨트롤을 만들고 ID를 부여하고 이벤트 처리기를 연결합니다. 서버 컨트롤의 OnInit에 Panel 컨트롤에 단추를 추가하고 (패널에서 상속 받음을 기억하십시오) 그런 다음 모든 것이 렌더링됩니다. 다음과 같이 표시됩니다.
public class MyCustomControl: Panel
{
private Button myButton;
public MyCustomControl()
{
myButton = new Button();
myButton.ID = "btnTest";
myButton.Click += new EventHandler(btnTest_Click);
}
protected void btnTest_Click(object sender, EventArgs e)
{
//do something...
}
//...
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
this.Controls.AddAt(0, myButton);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
//...
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
}
protected override void Render(HtmlTextWriter output)
{
base.RenderContents(output);
}
}
매우 잘 작동합니다. 버튼이 올바르게 렌더링되고 클릭하면이 고객 서버 컨트롤 내부의 적절한 핸들러가 호출되어 실행됩니다. 그러나 문제는 그러나 생성 된 모든 단추가 동일한 ID "btnTest"를 가지므로이 서버 컨트롤의 여러 인스턴스를 내 페이지에 추가하려고 할 때 충돌이 발생합니다. 그래서 내가 시도한 것은 임의의 숫자를 버튼의 id, s.t에 연결하는 것입니다. 그것은 "btnTest1235512"또는 이와 유사한 것으로 끝납니다. 이것은 여러 ID로 내 문제를 해결하지만, 이벤트 처리기가 버튼을 클릭 할 때 더 이상 올바르게 호출되지 않는 문제가 발생합니다. 이 문제는 내 버튼이 항상 생성자에 입력 할 때 다른 ID를 가져오고 적절한 콜백 (btnTest_Click 이벤트 핸들러)이 없기 때문에 발생했다고 생각합니다.
누군가 내가이 문제를 어떻게 처리 할 수 있는지 제안 해 줄 수 있습니까? 버튼의 ID를 기억하고 다시 연관시킬 수있는 방법이 있습니까? 지금까지 내가 아는 한, ViewState를 아직 사용할 수없는 OnInit에서 이런 일이 발생했습니다. ID를 ViewState에 저장하면 작동하지 않습니다.
제안 사항
이 질문을 확인하십시오 : [.Net 요소 ID 변경] (http : // stackoverflow.com/questions/699677/-net-changes-the-element-ids/699691 # 699691) –