2011-02-28 5 views
0

몇 가지 기존 컨트롤을 래핑하는 몇 가지 사용자 지정 웹 컨트롤을 만들려고합니다. 예를 들어, 그 중 하나는 텍스트 상자의 줄 바꿈입니다 (해당하는 유효성 검사기와 같은 추가 동작이 필요하기 때문에). 문제는 해당 컨트롤의 데이터를 포스트 백에서 보내도록하는 방법을 모르겠습니다. 지금 제어와 웹 양식을 테스트하는 경우사용자 지정 웹 컨트롤 및 포스트 백

public class MyTestBox: WebControl 
{ 
protected TB { get; set; } 
public Text 
{ 
    get { return TB.Text; } 
    set { TB.Text = value; } 
} 
protected override void CreateChildControls() 
{ 
TB= new TextBox() 
Controls.Add(TB); 
} 
} 

:하지만

아주 간단한 예는

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
<bleh:MyTextBox ID="MyTextBox1" runat="server" /> 
<asp:Button ID="Button1" runat="server" Text="Submit" /> 

그런 다음 텍스트 상자에 텍스트를 입력하고 제출 한 후, TextBox1에 텍스트를 사용할 수 있습니다 Page_Load에서 MyTextBox1.Text는 비어 있습니다. 포스트 백을 보낼 때 해당 내용을 사용할 수 있도록 변경해야하는 항목은 무엇입니까?

편집 : 지금 생각 컨트롤을 초기화 할 때 단순히 요청 양식을 확인하는 것입니다

뭔가 :

protected override void OnInit(EventArgs e) 
{ 
    TB.ID = this.ID + "_TextBox1"; 
    Controls.Add(TB); 
    if (Page.Request.Form[TB.UniqueID] != null) 
    { 
     Text = Page.Request.Form[TB.UniqueID]; 
    } 
} 

그것은 작동하는 것 같군,하지만 종류의 해키 느낀다. 이것은 합리적인 방법처럼 보입니까?

+0

System.Web.UI.Textbox에서 상속하는 옵션입니까? 그렇다면 Text 속성에 대해 신경 쓰지 않아도됩니다. 추가하려는 기능에 초점을 맞 춥니 다. – adt

+0

이 경우에는 옵션이며 수행 할 수도 있습니다. 한편, 비슷한 문제가있는 좀 더 복잡한 컨트롤이 있습니다. 문제가 더 많고 편집에 추가 한 방식을 고수하는 것이 좋습니다. – Kuzco

답변

0

동적으로 생성 된 TextBox에 ID를 부여한 다음 컨트롤의 Text 속성에 TextBox를 찾아 텍스트를 반환해야합니다.

public class BksTextBox: WebControl 
{ 
protected TB { get; set; } 
public Text 
{ 
    get 
    { 
     return ((TextBox)this.FindControl("txt")).Text; 
    } 
} 
protected override void CreateChildControls() 
{ 
TB= new TextBox() 
TB.ID = "txt"; 
Controls.Add(TB); 
} 
} 
+0

작동하지 않는 것 같아 걱정됩니다. – Kuzco

0

질문이 없습니다. 웹 컨트롤에 몇 가지 추가 동작을 추가해야하는 경우 상속 클래스 동작을 확장하려는 경우와 동일한 작업을 수행해야합니다. 당신은 straigh 형태를 텍스트 상자 클래스를 상속하고 그것은 페이지 수명주기와 함께 할 수있는 뭔가가 수

public class BksTextBox: TextBox 
    { 
    //it is just as example 
    public string TextToUpperCase 
    { 
    get 
     { 
     return Text.ToUpperCase(); 
     } 
    } 

} 
+0

하지만 어떻게하면 사용자가 텍스트를 변경하고 제출할 때 ViewState [ "Text"]가 업데이트되는 방식으로 실제 텍스트 상자에 연결할 수 있습니까? – Kuzco

+0

사용자가 텍스트를 입력 한 다음 제출하는 과정에서 Text 속성 집합에 액세스하지 않으며 ViewStart 항목이 null이기 때문에 여전히 트릭을 수행하지 않습니다. – Kuzco

0

을 필요로하는 모든 추가 동작을 추가 할 수 있습니다. Text 속성 getter에서 this.EnsureChildControls()을 사용해보십시오. 페이지 수명주기에 대한 자세한 내용은 MSDN documentation에서 확인할 수 있습니다.

관련 문제