e.Item.FindControl wirft Objektverweis nicht auf eine Instanz eines Objekts festgelegt wird
-
06-07-2019 - |
Frage
Hier ist der Teil des Repeater-Code, die Ausnahme auslöst ... „Computer.Administrators“ ist Stringobjekt. Debugger zeigt, dass „AdminsEnumerator.Current“ richtigen Zeichenfolge-Wert wird aber als „txtAdministrators.Text“ versucht, Wert zu setzen - Ausnahme ausgelöst. Bitte helfen Sie mit Ideen.
<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>
Und hier ist der Code hinter sich.
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;
}
}
Lösung
Sie müssen sicherstellen, dass Sie nicht in einem Header-Elemente:
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
}
(sorry, das aus dem Gedächtnis, aber das in Ihrem ItemDataBound Verfahren gehen sollte)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow