2010-03-20 34 views
19

Tất cả các cách tôi có thể nghĩ để làm điều này có vẻ rất đáng sợ. Cách tốt nhất để làm điều này là gì, hoặc ít nhất là phổ biến nhất?Truy cập hộp văn bản trong điều khiển lặp lại

Tôi đang truy xuất tập hợp các hình ảnh từ truy vấn LINQ-to-SQL và dữ liệu hóa nó và một số dữ liệu khác vào bộ lặp. Tôi cần phải thêm một hộp văn bản cho mỗi mục trong bộ lặp sẽ cho phép người dùng thay đổi tiêu đề của mỗi hình ảnh, rất giống với Flickr.

Làm cách nào để truy cập hộp văn bản trong bộ điều khiển lặp lại và biết hình ảnh của hộp văn bản đó thuộc về?

Dưới đây là những gì mà điều khiển lặp sẽ trông như thế, với một nút gửi mà sẽ cập nhật tất cả các hàng hình ảnh trong LINQ-to-SQL:

alt text http://casonclagg.com/layout.jpg

Edit:

Mã này hoạt động

Chỉ cần đảm bảo bạn không thổi các giá trị của mình bằng cách Liên kết ngoài nếu (! Page.IsPostBack) như tôi .. Rất tiếc.

<asp:Repeater ID="Repeater1" runat="server"> 
    <ItemTemplate> 
     <div class="itemBox"> 
      <div class="imgclass"> 
       <a title='<%# Eval("Name") %>' href='<%# Eval("Path") %>' rel="gallery"> 
        <img alt='<%# Eval("Name") %>' src='<%# Eval("Path") %>' width="260" /> 
       </a> 
      </div> 
      <asp:TextBox ID="TextBox1" Width="230px" runat="server"></asp:TextBox> 
     </div> 
    </ItemTemplate> 
</asp:Repeater> 

Và Gửi Bấm:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    foreach (RepeaterItem item in Repeater1.Items) 
    { 
     TextBox txtName = (TextBox)item.FindControl("TextBox1"); 
     if (txtName != null) 
     { 
      string val = txtName.Text; 
      //do something with val 
     } 
    } 
} 
+0

Bạn đang cố gắng truy cập vào hộp văn bản trên máy khách hoặc trên máy chủ sau khi đăng lại? –

+0

Máy chủ trong Submit_Click – Jason

Trả lời

31

Các bạn đã thử một cái gì đó như sau trên nút bấm: -

foreach (RepeaterItem item in Repeater1.Items) 
{ 
     TextBox txtName= (TextBox)item.FindControl("txtName"); 
     if(txtName!=null) 
     { 
     //do something with txtName.Text 
     } 
     Image img= (Image)item.FindControl("Img"); 
     if(img!=null) 
     { 
     //do something with img 
     } 
} 

/* Trong trường hợp txtName và Img là Id của hộp văn bản và điều khiển hình ảnh tương ứng trong bộ lặp. */

Hy vọng điều này sẽ hữu ích.

+0

Bạn không biết giá trị của "txtName", phải không? – Jason

+1

Bạn sẽ nhận được giá trị bằng cách sử dụng thuộc tính txtName.Text đó trong ví dụ trên. –

+0

Tôi có nghĩa là bạn không biết tên của điều khiển. Vì vậy, làm thế nào để bạn tìm thấy nó ... như trong FindControl ("nameOfControl"). NameOfControl là gì? – Jason

0

On postback, bạn có thể lặp qua các bộ sưu tập của RepeaterItems trong repeater.Items. Sau đó bạn có thể lấy mỗi TextBox với mã như

TextBox tbDemo = (TextBox)rptr.Items[index].FindControl("textBox"); 
11

.aspx

 <asp:Repeater ID="rpt" runat="server" EnableViewState="False"> 
     <ItemTemplate> 
       <asp:TextBox ID="txtQty" runat="server" /> 
     </ItemTemplate> 
     </asp:Repeater> 

cs

 foreach (RepeaterItem rptItem in rpt.Items) 
     { 
      TextBox txtQty = (TextBox)rptItem.FindControl("txtQty"); 
      if (txtQty != null) { Response.Write(txtQty.Text); }   
     } 

Hãy chắc chắn để thêm EnableViewState = "False" để lặp lại của bạn, nếu không bạn sẽ nhận được chuỗi rỗng. (Điều đó lãng phí thời gian của tôi, không lãng phí của bạn :))

+2

+1 để đề cập đến EnableViewState –

+0

Nếu tôi muốn nhận tất cả các hộp văn bản và thêm nó vào Danh sách để vô hiệu hóa thuộc tính 'readonly' thành true? – Si8

Các vấn đề liên quan