在asp:ListView LayoutTemplate中设置控制值时出错

时间:2013-07-16 02:50:26

标签: c# .net

所以我真的不确定我在这里做错了什么,但我的代码显然不起作用。我有我的列表视图做我需要的一切,除了当我使用ListView.FindControl()方法,然后在该控件上设置属性时,它给我一个Object reference not set to an instance of an object.错误。这是我的代码:

ASPX

<p class="rates-title"><span>
            <asp:Literal ID="currentDate" runat="server"></asp:Literal></span><br>
            Todays Rates</p>
        <span class="rates-arrow sprite"></span>
        <asp:ListView ID="RatesList" ItemPlaceholderID="RSSPlaceholder" runat="server">
            <LayoutTemplate>
                <ul>
                    <asp:PlaceHolder ID="RSSPlaceholder" runat="server"></asp:PlaceHolder>
                    <li>
                        <asp:HyperLink ID="AllRatesLink" CssClass="all-rates" runat="server">
                        View All Rates<span></span>
                        </asp:HyperLink>
                    </li>
                </ul>
            </LayoutTemplate>
            <ItemTemplate>
                <li>
                    <div class="rate-text">
                        <p><%# Eval("Name") %></p>
                        <div class="rate">
                            <p><%# Eval("InitialRate") %>%</p>
                        </div>
                    </div>
                    <%# Eval("Apr") %>
                    <a href="#rates-box-<%# Eval("Id") %>" class="todays-rates-click-side sprite"></a>
                    <div class="todays-rates-rollover">
                        <p><%# Eval("ContentTruncated") %></p>
                    </div>
                </li>
            </ItemTemplate>
        </asp:ListView>

背后的代码

        currentDate.Text = DateTime.Now.ToString("MM.dd.yy");
        HyperLink allRatesLink = (HyperLink)RatesList.FindControl("AllRatesLink");
        allRatesLink.Text = "hello";

所以奇怪的是currentDate工作得很好,我使用的数据(我的代码隐藏中的其他地方)可以很好地迭代列表,但是只要我在{{{ 1}}控制,它给对象引用没有设置错误。关于这个的任何想法/帮助?

1 个答案:

答案 0 :(得分:3)

allRatesLink为null,因为在尝试设置null属性时未找到导致Object引用错误的内容。

在创建LayoutTemplate之后需要调用FindControl,例如在OnLayoutCreated处理程序中或在DataBind()之后