[英]e.Item.FindControl throws Object reference not set to an instance of an object
Here is the part of Repeater code that throws exception... "Computer.Administrators" is StringCollection object. 这是引发异常的Repeater代码的一部分...“ Computer.Administrators”是StringCollection对象。 Debugger shows that "AdminsEnumerator.Current" gets correct string value but when "txtAdministrators.Text" tries to set value - exception is thrown. 调试器显示“ AdminsEnumerator.Current”获得正确的字符串值,但是当“ txtAdministrators.Text”尝试设置值时-引发异常。 Please help with ideas. 请提供意见。
<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>
And here is code behind. 这是后面的代码。
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;
}
}
You need to make sure you're not in a header item: 您需要确保您不在标题项目中:
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
}
(sorry, this is from memory, but that should go in your ItemDataBound method) (对不起,这是从内存中获取的,但是应该放在您的ItemDataBound方法中)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.