2011-07-06 6 views
1

IsPostBack 매개 변수가 true 일 때 페이지로드시 프로그래밍 방식으로 생성 된 asp.net 컨트롤을 사용하여 속성 (예 : Text)을 얻으려면 어떻게해야합니까?asp-control을 사용하여 '텍스트'속성을 가져올 수 없습니다.

스키마 :

  • 생성 제어 (예 : TextBox box = new TextBox(); box.ID = "BoxID") (예를 들어 SomeControlInPageID.Controls.Add(box))
  • 사용자 ID "BoxID"이 텍스트 상자를 (볼 수 있지만, 우리가 가능성이없는 페이지에서
  • 디스플레이 제어 텍스트 속성 사용을 얻으려면 BoxID.Text이 프로그래밍 방식으로 만들어 졌기 때문에!) 페이지에서 은 텍스트를 넣습니다.
  • 페이지의 시작 버튼 (asp : 버튼)과 시작 페이지 rel ... oading 과정
  • 시작하여 Page_Load 방법 & IsPostBack을 매개 변수는
  • 내가를 Page_Load 방법에 Text 속성을 얻기 위해이 코드를 사용하려고 진정한 가치를 필요하지만 그것은 작동하지 것 :

    void Page_Load() 
    { 
        if (Page.IsPostBack) 
        { 
        TextBox box = SomeControlInPageID.FindControl("BoxID") as TextBox; 
        string result = box.Text; 
        } 
        else 
        { 
        // creating controls programatically and display them in page 
        ... 
        } 
    } 
    
이 코드의

box.Text은 항상 null 값을 사용합니다.

+0

텍스트 상자 컨트롤을 만드는 경우. 아마 그 페이지의 Init 이벤트 여야합니다. 포스트 백 중에 액세스하기 전에 컨트롤을 다시 만들어야합니다. – MUS

+0

@Roman이 문제와 관련하여 행운이 있었나요? – rsbarro

답변

2

여기에서의 핵심 당신이 동적 컨트롤을 페이지가로드 될 때마다 다시 확인해야합니다. 컨트롤이 만들어지면 ASP.NET은 게시 된 백 값을 해당 컨트롤에 채울 수 있습니다. 아래에 완전한 예제를 포함 시켰습니다. 알림 OnInit 이벤트 (Page_Load 전에 발생)에서 컨트롤을 추가 한 다음 포스트 백이 발생한 경우 Page_Load 이벤트에서 값을 다시 읽을 수 있습니다.

<%@ Page Language="C#" AutoEventWireup="true" %> 
<html> 
<body> 
    <form id="form1" runat="server"> 
    <asp:Panel ID="myPanel" runat="server" /> 
    <asp:Button ID="btnSubmit" Text="Submit" runat="server" /> 
    <br /> 
    Text is: <asp:Literal ID="litText" runat="server" /> 
    </form> 
</body> 
</html> 
<script runat="server"> 
protected void Page_Load(object sender, System.EventArgs e) 
{ 
    if(Page.IsPostBack) 
    { 
     var myTextbox = myPanel.FindControl("myTextbox") as TextBox; 
     litText.Text = myTextbox == null ? "(null)" : myTextbox.Text; 
    } 
} 

protected override void OnInit(EventArgs e) 
{ 
    AddDynamicControl(); 
    base.OnInit(e); 
} 

private void AddDynamicControl() 
{ 
    var myTextbox = new TextBox(); 
    myTextbox.ID = "myTextbox"; 
    myPanel.Controls.Add(myTextbox); 
} 
</script> 
1

aspx 페이지 페이지의 LifeCycle을 참조하십시오. Page_Init 처리기 내에 텍스트 상자를 추가해야합니다. 그런 다음 page_load 이벤트에서 textBox에 액세스 할 수 있습니다.

protected void Page_Init(object sender, EventArgs e) 
{ 
    TextBox tb = new TextBox(); 
    tb.ID = "textbox1"; 
    tb.AutoPostBack = true; 
    form1.Controls.Add(tb); 
} 
protected void Page_Load(object sender, EventArgs e) 
{ 
    /// in case there are no other elements on your page 
    TextBox tb = (TextBox)form1.Controls[1]; 
    /// or you iterate through all Controls and search for a textbox with the ID 'textbox1' 
    if (Page.IsPostBack) 
    { 
     Debug.WriteLine(tb.Text); /// only for test purpose (System.Diagnostics needed) 
    }   
} 

HTH

관련 문제