【发布时间】:2012-11-14 05:48:31
【问题描述】:
我收到以下错误消息:
对象引用未设置为对象的实例。
代码隐藏:
public partial class Edit : System.Web.UI.Page
{
private TextBox updated_time;
protected void Page_Load(object sender, EventArgs e)
{
updated_time = (TextBox)ABC_DV.FindControl("txt_updated_time");
updated_time.Text = DateTime.Now.ToString();
}
}
我该如何解决这个问题?
更新
<asp:DetailsView ID="ABC_DV" runat="server" AutoGenerateRows="False"
DefaultMode="Edit" DataKeyNames="TYPE_ID" DataSourceID="ABC_EDS">
<Fields>
<asp:TemplateField HeaderText="Type Id" SortExpression="TYPE_ID">
<EditItemTemplate>
<asp:TextBox ID="txt_type_id" Width="200" runat="server" Text='<%# Bind("TYPE_ID") %>'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("TYPE_ID") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("TYPE_ID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Updated Time" SortExpression="UDPATED_TIME">
<EditItemTemplate>
<asp:TextBox ID="txt_updated_time" Width="200" runat="server" Text='<%# Bind("UDPATED_TIME") %>'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("UDPATED_TIME") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Labe2" runat="server" Text='<%# Bind("UDPATED_TIME") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Fields>
</asp:DetailsView>
【问题讨论】:
-
确保
ABC_DV已正确实例化,并且txt_updated_time存在于ABC_DV中,因此FindControl调用不会返回 null。 -
在什么级别?发布您的标记或相关的建筑代码,
FindControl不是递归的。 -
似乎
(TextBox)ABC_DV.FindControl("txt_updated_time");正在返回null,这意味着ABC_DV.FindControl()找不到txt_updated_time。可以上传ABC_DV的aspx代码吗? -
@Bishan 好的,您需要考虑
DetailsView在尝试访问控件时所处的模式,如果不是,它不会存在于层次结构中' t 在编辑模式下导致Page_Load在没有DetailsView在编辑模式下调用时爆炸。在代码中添加一些检查以正确处理控件状态。 -
几乎所有的 NullReferenceException 情况都是一样的。请参阅“What is a NullReferenceException in .NET?”获取一些提示。
标签: c# asp.net .net exception-handling findcontrol