【问题标题】:e.Item.FindControl throws Object reference not set to an instance of an objecte.Item.FindControl 抛出未设置为对象实例的对象引用
【发布时间】:2009-06-21 01:05:48
【问题描述】:

这是引发异常的Repeater代码部分......“Computer.Administrators”是StringCollection对象。调试器显示“AdminsEnumerator.Current”获取正确的字符串值,但是当“txtAdministrators.Text”尝试设置值时 - 抛出异常。请帮忙出出主意。

<asp:Repeater ID="repeatAdministrators" OnItemDataBound="repeatAdministrators_ItemDataBound" runat="server">
    <HeaderTemplate>
        <tr>
            <td class="formLabel">
                Administrators:
            </td>
            <td class="formInputText">
    </HeaderTemplate>
    <ItemTemplate>
        <asp:TextBox ID="txtAdministrators" runat="server" MaxLength="50" Enabled="False"></asp:TextBox><br />
    </ItemTemplate>
    <FooterTemplate>
        </td> </tr>
        <tr>
    </FooterTemplate>
</asp:Repeater>

这是后面的代码。

 protected void btnPing_Click(object sender, EventArgs e)
    {
        //...

        repeatAdministrators.DataSource = Computer.Administrators;
        repeatAdministrators.DataBind();
    }

    protected void repeatAdministrators_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        TextBox txtAdministrators = e.Item.FindControl("txtAdministrators") as TextBox;
        StringEnumerator AdminsEnumerator = Computer.Administrators.GetEnumerator();

        while (AdminsEnumerator.MoveNext())
        {
            txtAdministrators.Text = AdminsEnumerator.Current;
        }
    }

【问题讨论】:

    标签: c# asp.net repeater findcontrol


    【解决方案1】:

    您需要确保您不在标题项中:

    if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
    }
    

    (对不起,这是从记忆中获得的,但这应该在您的 ItemDataBound 方法中)

    【讨论】:

    • 我确认。 (为您修复了语法)
    • 谢谢,在我的 mac 上,没有快速访问 MSDN 或 Intellisense :)
    猜你喜欢
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多