2012-11-30 3 views
1

이전 페이지에서 주어진 답변에 따라 필드 조합에서 약 10 개의 다른 변형을 가질 수있는 양식이 있습니다 (대부분 동일하지만 몇 가지 변경 사항이 있음). 나는 10 개의 별도의 페이지를 만들기보다는, 동적으로 만들려고했다. 결국 이것은 데이터베이스에서 양식 설정을 가져 오지만 지금은 동적 부분을 작동 시키려고합니다. 다음 코드는 다소 효과가 있지만 이상한 결과를 낳습니다.ASP.NET 폼 컨트롤을 동적으로 생성하기

private void AddTestControls() 
{ 
    var newbox = new TextBox(); 
    newbox.ID = "FirstBox"; 
    newbox.Text = "This is dynamic"; 
    newbox.CssClass = "stepHeader"; 
    DynamicDiv1.Controls.Add(newbox); 

    var newlit = new Literal(); 
    newlit.ID = "FirstLit"; 
    newlit.Text = ".<br/>."; 
    DynamicDiv1.Controls.Add(newlit); 

    newbox.ID = "SecondBox"; 
    newbox.Text = "This is also dynamic"; 
    newbox.CssClass = "step"; 
    DynamicDiv1.Controls.Add(newbox); 

} 

나는 그것을 통해 강화했고 모든 속성이 올바르게 설정지고 있지만, 페이지가 마지막으로 렌더링 할 때 만 SecondBox 컨트롤을 볼 수 있습니다. FirstBox의 흔적은 없습니다. SecondBox이 자신의 개체 (예 : newebox2)가되도록 변경하면 두 가지 모두 표시되지만 궁극적으로 데이터베이스에서 양식을 작성하는 방법과 관련하여 상황이 복잡해질 수 있습니다. 나는 왜 DivX의 컨트롤 모음에 추가하기 위해 텍스트 상자 객체를 다시 만들어야하는지 이해하지 못합니다. 나는이 모든 잘못을 저질러 가고 있는가, 아니면 어딘가에 한 걸음을 놓치고 있는가?

답변

1

고객님의 "SecondBox"가 여전히 "FirstBox"newbox을 덮어 씁니다. 두 번째 상자에 대한 새로운 TextBox 만들기 :

var newbox = new TextBox(); 
newbox.ID = "FirstBox"; 
newbox.Text = "This is dynamic"; 
newbox.CssClass = "stepHeader"; 
DynamicDiv1.Controls.Add(newbox); 

var newlit = new Literal(); 
newlit.ID = "FirstLit"; 
newlit.Text = ".<br/>."; 
DynamicDiv1.Controls.Add(newlit); 

// Create a new TextBox 
var secondBox = new TextBox(); 
secondBox.ID = "SecondBox"; 
secondBox.Text = "This is also dynamic"; 
secondBox.CssClass = "step"; 
DynamicDiv1.Controls.Add(secondBox); 

나는이 일을 복잡하게하지만, 당신이 할 수있는 것은 그의 경우, 텍스트 상자를 만드는 방법을 만드는 것입니다 수있는 이유를 확실히 모르겠어요 쉽게 :

TextBox CreateTextBox(string id, string text, string cssClass) 
{ 
    var box = new TextBox(); 
    box.ID = id; 
    box.Text = text; 
    box.CssClass = cssClass; 
    return box; 
} 

그리고 그것이 작동하는 가정 방법은 무엇 다음

var newBox = CreateTextBox("FirstBox", "This is dynamic", "stepHeader"); 
DynamicDiv1.Controls.Add(newBox); 
+0

정보 주셔서 감사합니다. '.Add'는 참조를 전달하는 것이 아니라 새로운 객체를 만드는 것을 의미한다고 생각했습니다. 나는 그것이 왜 복잡하게 될지 생각하는 이유를 확신하지 못합니다. 당신이 마음 속으로 계획하고있는 것들 중 하나 일뿐입니다. 나는 당신의 방법 제안을 단축하는 것을 끝내었다.'var newbox = new TextBox() {ID = "FirstBox"CssClass = "stepHeader"Text = "이것은 동적"}'코드의 양을 줄이고 동일한 변화에 영향을주기 때문에 . – techturtle

+0

@techturtle 모두에게 일어남 =) 나는 실제로 네가 한대로 글을 쓸 것이지만, 설명을 위해 나는 그것을 방법으로 썼다. –

0

. newbox1은 참조이므로 처음으로 DynamicDiv1에 추가 된 후 해당 값이 있습니다. Text을 변경하면 Text이 변경됩니다. 이 SO이 유용 할 수 있습니다. 이 SO은 현재 가지고있는 것과 동일한 문제를 설명합니다.

관련 문제