【问题标题】:Cant change text/value of textbox inside repeater无法更改转发器内文本框的文本/值
【发布时间】:2014-05-10 13:57:58
【问题描述】:

您好,感谢您抽出宝贵时间帮助我。

我正在尝试更改位于我的中继器内的文本框的文本。

<asp:Repeater runat="server" ID="rpCategories">
                        <HeaderTemplate>
                            <ul id="nav_down" class="nav_down">
                        </HeaderTemplate>
                        <ItemTemplate>
                            <li><a href="<%# Eval("ID", "/products.aspx?id={0}") %>"><%# Eval("Title") %></a></li>
                        </ItemTemplate>
                        <FooterTemplate>
                            <li><a href="#"></a></li>
                            <li><a href="#">Contact</a></li>
                            <li><a id="cart_logo"></a>
                                <asp:Panel runat="server" ID="pnlBasket">
                                    <asp:textbox runat="server" id="txtTotalCount" Enabled="false" CssClass="ltTotalCount"></asp:textbox>
                                </asp:Panel>
                            </li>
                            </ul>
                        </FooterTemplate>
                    </asp:Repeater>

这是我要更改其文本的 id="txtTotalCount" 的 asp:textbox。

这是我的 C# 代码:

TextBox ltTotalCount = (TextBox)FindControl("lblTotalCount");
ltTotalCount.Text = "1";

但如果我运行代码,我会收到此错误:对象引用未设置为对象的实例。

如果有人能告诉我我做错了什么会很高兴。

【问题讨论】:

    标签: c# asp.net repeater


    【解决方案1】:

    因为 lblTotalCount 在父控件 - 中继器中,您必须通过中继器引用它。

    您应该可以在 FindControl 之前添加中继器的 id,就像这样...

    文本框 ltTotalCount = (TextBox)rpCategories.FindControl("lblTotalCount");

    【讨论】:

    • 非常感谢您的帮助
    • 我已为您的代码添加了更新。如果它不起作用,请告诉我。
    • 谢谢我试过你的代码,我仍然得到同样的错误
    • 您正在尝试查找 lblTotalCount,但我在任何地方都看不到。你不应该在寻找 txtTotalCount 吗?
    【解决方案2】:

    您必须将转发器指定为父控件才能查找文本框,而且由于它是转发器,因此很可能有多个具有该 ID 的文本框,因此您必须指定要查看的转发器项目:

    TextBox ltTotalCount = rpCategories.Items[0].FindControl("txtTotalCount") as TextBox;
    

    这将返回转发器第一行中的文本框。 你应该使用 Id 值而不是 CssClass 值

    【讨论】:

      【解决方案3】:

      ID 可能已被“增强”以防止呈现的 HTML 中出现重复的 ID。您可以通过查看 html 来验证这一点。

      您可以将其添加到文本框中:ClientIDMode="Static" 以使 ID 保持不变。

      您收到错误是因为 FindControl 返回 null 但您仍试图访问它。

      [编辑] 有人指出这不应该工作。我同意,以下是有效的方法:

      Control FooterTemplate = rpCategories.Controls[rpCategories.Controls.Count - 1].Controls[0];
      
      TextBox MyTextBox = FooterTemplate.FindControl("txtTotalCount") as TextBox;
      

      【讨论】:

      • 得说这似乎没有帮助。 ClientIDMode 用于客户端工作 - 问题是询问服务器端 ID。此外,用户发布的代码只是一起解决了错误的 id。我看不出添加 clientidmode="static" 会有什么帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多