2013-02-22 1 views
0

나는 이것과 관련된 두 개의 다른 게시물을 보았지만 내 코드와 관련된 의문점이 있습니다. 그래서 친절하게 나와 함께 참아 라.사용자 정의 컨트롤 안에있는 드롭 다운 목록의 선택 revisioning

텍스트 보아와 드롭 다운 목록 및 사용자 정의 유효성 검사기가 거의없는 사용자 정의 컨트롤이 있습니다. 사용자 정의 컨트롤은 코드를 통해 동적으로 추가됩니다.

나는

protected void Page_Init(object sender, EventArgs e) 
    { 
     if (GetPostBackControl(this) == "btnNewRow") 
     { 
      custControlCountID++; 
     } 
     for (int i = 0; i < custControlCountID; i++) 
     { 
      RejRow customControl = (RejRow)LoadControl("~/RejRow.ascx"); 
      customControl.ID = "rejRow" + i; 
      divHolder.Controls.Add(customControl); 
     } 
    } 

viewstate가 모두 텍스트 상자 놓기를 사용할 수 있습니다 사용자 컨트롤 자체

protected void Page_Load(object sender, EventArgs e) 
    {    
     ddl_RRC.DataSource = dicRC_Desc; 
     ddl_RRC.DataTextField = "value"; 
     ddl_RRC.DataValueField = "key"; 
     ddl_RRC.DataBind(); 

     txtRC.Text = Request.Form[txtRC.UniqueID]; //To retain the value of text box   
    } 

난 후 Page_Init에 동적으로 사용자 컨트롤을 추가하고 내부의 드롭 다운리스트를로드 할 때라도 코드를 사용하고 다운 목록. Page_Init에서 컨트롤을 추가하는 동안 동일한 ID를 사용하고 있는데 왜 컨트롤이 viewstate에서 값을 가져 오지 못합니까?

+0

'custControlCountID' 변수가 선언 된 곳은'ViewState'에 값을 저장합니까? –

+0

'custControlCountID'는'_Default' 클래스의 개인 정적 변수입니다 – nishantv

+0

정적 변수는 응용 프로그램 전체에 적용되며 모든 사용자에게 공유됩니다. 따라서이 페이지를 방문하는 모든 사용자는 동일한 변수를 공유하게됩니다. 즉시 제거하고'ViewState' 변수를 사용하는 속성으로 대체하십시오. –

답변

0

유일한 문제는 Page_Load에서 모든 포스트 백마다 DropDownList 데이터 바인딩을 사용한다는 것입니다. 그냥 난 당신이 그것 ViewState에도 Text의 저장해야하기 때문에 양식 필드에서 TextBox.Text 속성을 설정해야하는 이유 확실하지 않다, 그러나 IsPostback -property, 예컨대 :

protected void Page_Load(object sender, EventArgs e) 
{  
    if(!IsPostBack) 
    {  
     ddl_RRC.DataSource = dicRC_Desc; 
     ddl_RRC.DataTextField = "value"; 
     ddl_RRC.DataValueField = "key"; 
     ddl_RRC.DataBind(); 
    } 

    txtRC.Text = Request.Form[txtRC.UniqueID]; //To retain the value of text box   
} 

을 확인합니다.

+0

답장을 보내 주셔서 감사합니다. 당신은 viewstate의 양식 필드에 대해 옳습니다. 나는 viewstae가 내 사용자 컨트롤에 대해 false로 설정 되었기 때문에 erlier를 추가했습니다. 그리고 지금은 필요 없습니다. 그러나 드롭 다운 목록의 경우, if (! postback)을 사용하면 단추를 클릭하여 새 행을 추가 할 때 이전 컨트롤에 대한 선택 항목이 유지되지만 새 컨트롤은 값을 가져 오지 못합니다. 페이지로드시 채워야 할 필요가 있음을 알 수 있으며 버튼을 통해 항상 포스트 백이므로이 코드는 전체 양식이 처음으로로드 될 때 첫 번째 컨트롤에서만 실행됩니다. – nishantv

+0

@nishantv : 'btnNewRow-click' 이벤트를 사용하여'Page_Init'을 사용하는 대신 새 컨트롤을 만듭니다. 나는 당신이 어떻게 동적 인 통제를 (재) 만들어야하는지 오해했다고 생각한다. 그것을 트리거 한 이벤트에서 그들을 만들지 만 ** Page_Init (또는 가장 최근의 Page_Load)에 ** 다시 생성하십시오. 먼저 데이터 바인딩을 만들어야합니다. –

+0

컨트롤을 만들기 위해 Page_Init에서 코드를 분리해도 문제가 지속됩니다. 문제는 사용자 정의 컨트롤의 Page_Load에 드롭 다운 목록을로드하는 것입니다. 버튼 클릭 이벤트가 관련되어 있으므로 항상 포스트 백이 있습니다. ddl을'if (! postback)'로로드하면 컨트롤이 전혀로드되지 않습니다. 'if (! postback)'을 사용하지 않으면 ddl이 다시로드되고 선택 항목이 손실됩니다. – nishantv