Подтвердить что ты не робот

Доступ к текстовым полям в ретрансляторе

Все, что я могу думать, это очень хаки. Каков правильный способ сделать это или, по крайней мере, наиболее распространенный?

Я получаю набор изображений из запроса LINQ-to-SQL и привязываю его к нему и некоторые другие данные в ретранслятор. Мне нужно добавить текстовое поле для каждого элемента репитера, который позволит пользователю изменить заголовок каждого изображения, очень похожее на Flickr.

Как получить доступ к текстовым полям в элементе управления ретранслятора и узнать, какое изображение принадлежит этому текстовому поле?

Вот как выглядит элемент управления ретранслятора, с кнопкой отправки, которая будет обновлять все строки изображения в Linq-to-SQL:

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

Edit:

Этот код работает

Просто убедитесь, что вы не удаляете свои значения, привязавшись за пределами if (! Page.IsPostBack), как я.. Ой.

<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>

И отправить Нажмите:

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
        }
    }
}
4b9b3361

Ответ 1

Вы пробовали что-то вроде следующего при нажатии кнопки: -

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
      }
}

/* Где txtName и Img - это идентификаторы текстового поля и элементы управления изображением, соответственно, в репитере. */

Надеюсь, что это поможет.

Ответ 2

.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); }          
        }

Обязательно добавьте EnableViewState = "False" к вашему ретранслятору, иначе вы получите пустую строку. (Это потратило мое время, не растрачивайте ваши:))

Ответ 3

При обратной передаче вы можете перебирать коллекцию RepeaterItems в повторителе. Элементы. Затем вы можете извлечь каждый TextBox с кодом, например

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