【问题标题】:Accessing Textboxes in Repeater Control访问中继器控件中的文本框
【发布时间】:2010-03-20 21:16:18
【问题描述】:

我能想到的所有方法看起来都非常老套。什么是正确的方法,或者至少是最常见的方法?

我正在从 LINQ-to-SQL 查询中检索一组图像,并将其和一些其他数据数据绑定到转发器。我需要为转发器中的每个项目添加一个文本框,让用户更改每个图像的标题,非常类似于 Flickr。

如何访问中继器控件中的文本框并知道该文本框属于哪个图像?

这是转发器控件的外观,带有一个提交按钮,可以更新 Linq-to-SQL 中的所有图像行:

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

编辑:

此代码有效

只要确保你不会像我一样通过在 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
        }
    }
}

【问题讨论】:

  • 您是在回发后尝试访问客户端还是服务器上的文本框?

标签: c# asp.net textbox repeater


【解决方案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分别是repeater中的文本框和图片控件的Id。*/

希望这会有所帮助。

【讨论】:

  • 你不知道“txtName”的值吧?
  • 您将使用上面示例中的 txtName.Text 属性获取值。
  • 我的意思是你不知道控件的名称。那么你如何找到它......就像在 FindControl("nameOfControl") 中一样。 nameOfControl 是什么?
  • 没关系,我是个白痴。我的页面加载中没有 if(!Page.IsPostback) 。所以文本框正在重置。无视一切。 =D
  • 谢谢,在您的编辑中,TextBox1 是文本框控件的名称,您可以使用 FindControl("TextBox1") 获取文本框。如果您在 Img 中添加 runat="server"标记并有一个 ID 表示 Id="imgPuppy",您可以使用 FindControl("imgPuppy") 获取图像。如果您需要更多详细信息,请告诉我。
【解决方案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" 添加到您的转发器,否则您将得到空字符串。 (这浪费了我的时间,不要浪费你的:))

【讨论】:

  • 如果我想获取所有文本框并将其添加到 List 以禁用 readonly 属性为 true 怎么办?
【解决方案3】:

在回发时,您可以遍历repeater.Items 中的RepeaterItems 集合。然后,您可以使用诸如

之类的代码检索每个 TextBox
TextBox tbDemo = (TextBox)rptr.Items[index].FindControl("textBox");

【讨论】:

    猜你喜欢
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多