2013-02-14 2 views
0

질문 : 컨트롤이 부분 포스트 백을 실행 한 을 어떻게 식별합니까?UpdatePanel 내의 리피터 - 특정 리피터 하위 컨트롤 식별

* control = Repeater 컨트롤을 통해 동적으로 생성 된 텍스트 상자입니다.

상위 수준 : 기본적으로 Repeater 컨트롤을 캡슐화하는 UpdatePanel이 있습니다. 텍스트 상자와 자리 표시자를 동적으로 추가하려면 리피터를 사용합니다.

텍스트 상자 중 하나를 변경하면 UpdatePanel.Load Sub가 요청을 한 텍스트 상자를 결정하여 해당 위치 표시기에 컨트롤을 추가 할 수있게합니다. 또한 동적으로 추가됩니다. 순간

나는 오류를 받고 있어요 :.. "여러 컨트롤이 동일한 ID 'X'발견이의 FindControl는 컨트롤이 고유 ID의이 있어야

VB

Imports System.Data.SqlClient 

Partial Class _Default 
    Inherits System.Web.UI.Page 

    Public RegisteredRows As New List(Of CustomRow) 
    Public callbackResult As String = "" 
    Public rptCount As Integer = 0 

    Public Class CustomRow 
     Public desc As String 
    End Class 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles dynForm.Load 
     Dim i As Integer 
     For i = 0 To 3 
      Dim cr As CustomRow = New CustomRow 
      cr.desc = "" 
      RegisteredRows.Add(cr) 
     Next 
     Repeater1.DataSource = RegisteredRows 
     Repeater1.DataBind() 

     Dim cm As ClientScriptManager = Page.ClientScript 
     dynLit.Text = "<script type='text/javascript' language='javascript'> function HandleDynamic() { __doPostBack('" & btnDynamic.ClientID & "', null);}</script>" 

    End Sub 

    Protected Sub DataBound(ByVal sender As Object, ByVal e As RepeaterItemEventArgs) 
     If Not e.Item.DataItem Is Nothing Then 

      'Dim hdnBtn As Button = e.Item.FindControl("btnDynamic") 
      Dim tb As TextBox = e.Item.FindControl("asbText") 

      tb.Attributes.Add("onchange", "HandleDynamic();") 
      'tb.Attributes.Add("onchange", " __doPostBack('" & btnDynamic.ClientID & "', null);") 
      Repeater1.Controls.Add(tb) 

      If RegisteredRows Is Nothing Then 
       RegisteredRows = New List(Of CustomRow) 
      End If 

     End If 

    End Sub 

    Protected Sub upDynamic_Load(ByVal sender As Object, ByVal e As EventArgs) 
     Dim uPanel As UpdatePanel = CType(sender, UpdatePanel) 
     If sender.ID = "upDynamic" Then 

      For i As Integer = 0 To uPanel.Controls.Count - 1 
       If TypeOf uPanel.Controls(i) Is TextBox AndAlso uPanel.Controls(i).ID = "asbText" Then 
        If CType(uPanel.Controls(i), TextBox).Text <> "" Then 
         Dim lbl As New Label 
         lbl.Text = "Comments" 

         Dim txt As New TextBox 
         txt.Width = 100 
         txt.Text = "Hello World" 

         Dim ph As New PlaceHolder 
         ph = CType(sender.FindControl("phDynamic"), PlaceHolder) 

         ph.Controls.Add(lbl) 
         ph.Controls.Add(txt) 
        End If 
       End If 
      Next 
     End If 
    End Sub 
End Class 

ASPX

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %> 

<%@ Register Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
    Namespace="System.Web.UI" TagPrefix="asp" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Dyanmic Prototype</title> 
</head> 
<body> 
    <form id="dynForm" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" EnablePartialRendering="true" /> 
    <div> 
     <table cellpadding="0" cellspacing="0"> 
      <tr> 
       <td nowrap="nowrap"> 
        <asp:Label ID="lblMain" runat="server" Text="Are we on?" ></asp:Label> 
       </td> 
      </tr> 
      <tr> 
       <td> 
        <asp:UpdatePanel ID="upDynamic" runat="server" ChildrenAsTriggers="false" UpdateMode="Conditional" 
         OnLoad="upDynamic_Load"> 
         <ContentTemplate> 
          <asp:Repeater ID="Repeater1" runat="server" EnableViewState="false" OnItemDataBound="DataBound"> 
           <HeaderTemplate> 
            <table> 
             <tr> 
              <td nowrap="nowrap"> 
               <asp:Label ID="lblText" runat="server" Text="Offense" /> 
              </td> 
             </tr> 
            </table> 
           </HeaderTemplate> 
           <ItemTemplate> 
            <table> 
             <tr> 
              <td> 
               <tr> 
                <td> 
                 <asp:TextBox ID="asbText" runat="server" AutoComplete="Off" AutoCompleteType="Disabled" 
                  EnableViewState="false" Width="350px"></asp:TextBox> 
                </td> 
               </tr> 
               <asp:PlaceHolder ID="phDynamic" runat="server" /> 
              </td> 
             </tr> 
            </table> 
           </ItemTemplate> 
          </asp:Repeater> 
          <asp:Button ID="btnDynamic" runat="server" Text="" Visible="false" /> 
         </ContentTemplate> 
         <Triggers> 
          <asp:AsyncPostBackTrigger ControlID="btnDynamic" EventName="Click" /> 
         </Triggers> 
        </asp:UpdatePanel> 
       </td> 
      </tr> 
     </table> 
    </div> 
    </form> 
</body> 
</html> 

<asp:Literal runat="server" id="dynLit"></asp:Literal> 

답변

0

는 텍스트 상자에 ID를 설정하려고 했습니까?

Dim txt As New TextBox 
txt.Width = 100 
txt.Text = "Hello World" 
txt.id="textbox"+i