2011-08-03 7 views
2

의 컨트롤에서 데이터를 얻을 수 있습니다 : jQuery를에는 어떻게 항목 템플릿과 중계기가 중계기

<asp:Repeater ID="queryParametersRepeater" runat="server" 
    DataSourceID="queryParametersObjectDataSource"> 
    <ItemTemplate> 
    <tr class="itemTemplate"> 
     <td class="labelTd" style="width: 300px;"> 
     <asp:HiddenField runat="server" Value='<%# Eval("ParameterType") %>' /> 
     Define <%# Eval("ParameterName") %> (type <%# Eval("ParameterType") %>) 
     </td>       
     <td class="valueTd">        
     <asp:TextBox runat="server" Width="300px" Text='<%# Eval("ParameterName") %>' /> 
     <asp:CheckBox runat="server" Width="300px" /> 
     </td> 
    </tr> 
    </ItemTemplate>     
</asp:Repeater> 

내가 텍스트 상자와 chekBox의 디스플레이 속성을 변경하십시오. 어떻게 그 컨트롤에서 데이터를 얻을 수 있습니까?

내 컨트롤의 ID를 모르므로 FindControls() 함수를 사용할 수 없습니다.

+0

@Chris가 제안했듯이 서버 측 코드에서 참조 할 수있는 ID가 있어야합니다. 그런 다음 올바른 이름 지정 컨테이너에서 해당 ID를 사용하여'FindControl'을 사용해야합니다. Repeater의 경우 각 repeater 항목은 이름 지정 컨테이너의 역할을합니다. – VinayC

답변

11

ID와 findcontrol을 사용하여 값을 가져올 수 있습니다. 다음은 작동하는 예제입니다.

<%@ Page Language="C#" %> 
<%@ Import Namespace="System.Collections.Generic" %> 

<script runat="server"> 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      //bind the data source 
      RepeaterExample.DataSource = new List<KeyValuePair<int, string>>{ 
       new KeyValuePair<int, string>(1, "Test1"), 
       new KeyValuePair<int, string>(2, "Test2"), 
       new KeyValuePair<int, string>(3, "Test3") 
      }; 
      RepeaterExample.DataBind(); 
     } 

    } 

    protected void cmdSubmit_Click(object sender, EventArgs e) 
    { 
      //read the values and output them 
      litResults.Text = ""; 
      foreach (RepeaterItem i in RepeaterExample.Items) 
      { 

       TextBox txtExample = (TextBox)i.FindControl("txtExample"); 
       if (txtExample != null) 
       { 
        litResults.Text += txtExample.Text + "<br />"; 
       } 
      } 
    } 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
    </head> 
    <body> 
     <form id="form1" runat="server"> 
      <div> 
       <asp:Repeater ID="RepeaterExample" runat="server"> 
        <HeaderTemplate> 
         test</HeaderTemplate> 
        <ItemTemplate> 
         <asp:TextBox ID="txtExample" runat="server" Text='<%#Eval("Value") %>'></asp:TextBox> 
        </ItemTemplate> 
       </asp:Repeater><br /> 
       <asp:Button ID="cmdSubmit" runat="server" Text="Submit" OnClick="cmdSubmit_Click" /> 
       <br /> 
       <asp:Literal ID="litResults" runat="server"></asp:Literal> 
      </div> 
     </form> 
    </body> 
</html> 
+0

예, 그것은 일입니다 ... 많은 감사합니다. 귀하의 대답을하기 전에 FindCotrol()도 사용하지만 동적으로 jquery와 ID를 추가하고 작동하지 않습니다 – Alex

+0

그러나 어떤 컨트롤이 표시되는지, 확인란 또는 텍스트 상자를 감지 할 수 없습니다 – Alex

+0

어떻게 가시성을 설정하고 있습니까? 컨트롤이 렌더링되지 않도록 .Visible 속성 서버 측으로 설정하는 경우 속성 값을 확인할 수 있어야합니다. –

0

컨트롤에 클래스를 추가 할 수 있습니까? 시도해 볼 수 있다면 $(".givenClass").