2009-03-15 3 views
1

동적 인 측량을 만들려고합니다. 데이터베이스에서 모든 질문 컨트롤을 생성합니다. 아래는 내가 뭘하려고하는지 (데이터베이스 부분없이)의 예입니다. 나는 아래와 같이 질문을 표시 할 수있다. 사용자 입력을 읽을 수 없습니다.동적 컨트롤에서 사용자 입력 받기

누구에게 아이디어가 있습니까?

나는 viewstate를 들여다 보았지만 작동시키지 못하고있다.

포스트 백을 통해 페이지를 다시로드하면 컨트롤이 사라집니다. 내가 생각할 수있는 모든 이벤트를 살펴 보았으므로 페이지에 컨트롤이 없습니다. Page_Load 이벤트에서 다시 만들 때까지.

동적으로 생성 된 컨트롤에 대한 사용자 입력 값은 어디에서 찾을 수 있습니까?

페이지

<body> 
    <form id="form1" runat="server"> 
    <div> 

    </div> 
    </form> 
</body> 

코드 파일

 protected override void OnPreLoad(EventArgs e) 
{ 
    base.OnPreLoad(e); 
    foreach (Control item in form1.Controls) 
    { } 
} 

protected void Page_PreInit(object sender, EventArgs e) 
{ 
    foreach (Control item in form1.Controls) 
    { } 
} 
protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 
    foreach (Control item in form1.Controls) 
    { } 
} 

protected override void OnSaveStateComplete(EventArgs e) 
{ 
    base.OnSaveStateComplete(e); 
    foreach (Control item in form1.Controls) 
    { } 
} 
protected override void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 
    foreach (Control item in form1.Controls) 
    { } 
} 
protected void Page_Load(object sender, EventArgs e) 
{ 
    RadioButton rb; 
    rb = new RadioButton(); 
    rb.ID = "rb_1"; 
    rb.Text = "yes"; 
    rb.GroupName = "question"; 
    form1.Controls.Add(rb); 

    rb = new RadioButton(); 
    rb.ID = "rb_2"; 
    rb.Text = "no"; 
    rb.GroupName = "question"; 
    form1.Controls.Add(rb); 

    rb = new RadioButton(); 
    rb.ID = "rb_3"; 
    rb.Text = "other"; 
    rb.GroupName = "question"; 
    form1.Controls.Add(rb); 

    TextBox tb = new TextBox(); 
    form1.Controls.Add(tb); 

    Button btn = new Button(); 
    btn.Text = "Save"; 
    form1.Controls.Add(btn); 

    foreach (Control item in form1.Controls) 
    { 

    } 
} 

답변

1

당신은 고유 ID로 컨트롤을 생성해야합니다. 데이터베이스에서 각 control-id를 정확히 하나의 질문으로 수학적으로 계산할 수 있어야합니다. 이렇게하면 특정 질문에 대한 대답을 데이터베이스에 다시 쓸 수 있습니다.

1

편집 : OnInit 함수에서 컨트롤을 만듭니다 (Init 이벤트 중에). this page을 확인하십시오.

'rb'또는 'tb'변수의 클래스 범위를 지정하십시오. 또는 적어도 작성된 컨트롤에 대한 참조를 목록 (또는 배열)에 저장 한 다음 필요할 때이를 통해 액세스하려고합니다.

OnInit 함수에서 컨트롤을 만들면 뷰 상태를로드하기 전에 컨트롤이 만들어집니다. 따라서 뷰 상태가로드되면 사용자가 게시 한 값이 뷰 상태에서 컨트롤로 복원되므로 코드에서 액세스 할 수 있습니다. 컨트롤에 대한 참조 만 유지하면됩니다.