2009-12-14 3 views
0

TextBox 컨트롤을 자식 컨트롤로 포함하는 자체 컨트롤을 만들었습니다. 이 텍스트 박스는 autopostback이 설정되어 있습니다. 포스트 백이 호출되면 request.querrystring에 텍스트가 표시되지 않습니다. texbox에 입력 한 텍스트를 어디로 보내면 응답으로 보내야합니까? 또는이 정보를 보내는 더 쉬운 방법이 있습니까? 다시 게시 후 텍스트 상자에 입력 된 텍스트를 다시 한 번 가져오고 싶습니다.TextBox의 응답을 어떻게 추가합니까? C#

감사합니다.

답변

0

동적으로 생성 된 컨트롤의 경우 컨트롤을 만들고 Page_Init() 이벤트의 컨트롤 트리에 추가해야합니다. Page_Load()가 너무 늦었고 Page_PreRender()가 너무 늦습니다.

일단 컨트롤 트리에 있으면 런타임에서 포스트 백 이후에 컨트롤의 상태를 복원합니다. myTextBox.Text을 사용하여 컨트롤의 내용에 액세스 할 수 있습니다. 사용하지 않아도됩니다. Request.QueryString

TextBox 만 포함 된 컨트롤의 경우 INamingContainer가 아닌 사용자 정의 컨트롤을 사용하면 훨씬 쉽습니다. 그렇게하면 .ascx 마크 업에 <asp:TextBox>을 사용할 수 있습니다.

+0

덕분에, 많이 치유되었습니다. – user247458

+0

당신이 여기 새로 왔음을 알고 있지만 도움이되는 답변을 upvote하는 것이 관습입니다 ... – RickNZ

0

사용자 정의 컨트롤? 이와 같이 게시 된 모든 컨트롤은 LoadPostData 메서드에서 해당 데이터를로드합니다. 이 값을 사용자 정의 컨트롤 클래스에서 재정의하고 다음을 통해 값을 액세스 할 수 있습니다.

var text = postDataCollection [textboxID];

사용자 지정 컨트롤 내의 텍스트 상자에 ID가 있어야합니다.

다른 말을하는 경우 구체적인 내용을 알려주십시오.

감사합니다.

+0

안녕하세요 감사합니다. 이것은 내 컨트롤의 단축 코드입니다. 이 컨트롤은 다시 게시를 유발하지만 응답은 되돌려 보내지 않습니다. 어쩌면 당신은 loadpostdata에 맞습니다.하지만이 방법은 제 통제에서 오버라이드하지 않아도됩니다. 공용 클래스 my_control : 제어,하는 INamingContainer { 보호 재정의 무효 OnPreRender (EventArgs입니다 전자) { 텍스트 상자의합니다 MyTextBox = 새 텍스트 상자(); mytextbox.ID = "name"; mytextbox.AutoPostBack = true; Controls.Add (mytextbox); } } – user247458

+0

사과드립니다. 일부 컨트롤은이를 구현하지만 컨트롤에서 상속되므로 IPostbackDataHandler 네임 스페이스를 추가합니다.이 네임 스페이스는 사용자를 대신하여 추가하고 다시 게시 데이터를 처리 할 수 ​​있도록합니다. 당신은 ID를 통해 그것을 얻을 수 있어야합니다 ...하지만 그것은 clientID 또는 uniqueID (어떤 것을 잊어 버릴 것입니다). –

0
  1. (텍스트 상자) Control.FindControl ("컨트롤 ID")
  2. 다시 게시 동적 컨트롤의 값을 얻을으로 Request.Form ("제어 클라이언트 ID") 응답
관련 문제