C# 对象引用未设置为对象#2的实例

C# 对象引用未设置为对象#2的实例,c#,asp.net,.net,exception-handling,findcontrol,C#,Asp.net,.net,Exception Handling,Findcontrol,我收到以下错误消息: 对象引用未设置为对象的实例 代码隐藏: 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");

我收到以下错误消息:

对象引用未设置为对象的实例

代码隐藏:

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>

当您点击
页面加载
方法时,您的控件应该已经重建并添加回页面。此时出现错误的事实表明特定控件不存在——至少不存在您指定的ID


尝试将代码移动到您的
PreRender()
-这是在将页面呈现到响应流之前执行的方法,如果您添加了动态控件或弄乱了控件的ID,那么这应该早在本阶段之前就发生了。

好的,在尝试访问控件时,您需要考虑
详细视图所处的模式,如果不在编辑模式下,它将不存在于层次结构中,从而导致在编辑模式下调用
页面加载时,如果没有
详细视图
,它将爆炸。在代码中添加一些检查以正确处理控件状态

protected void Page_Load(object sender, EventArgs e)
{
    if (ABC_DV.CurrentMode == DetailsViewMode.Edit) {
      updated_time = (TextBox)ABC_DV.FindControl("txt_updated_time");
      if(null != updated_time)
        updated_time.Text = DateTime.Now.ToString();
    }
}

确保正确实例化了
ABC\u DV
,并且
txt\u updated\u time
存在于
ABC\u DV
中,以便
FindControl
调用不会返回null。在什么级别?发布您的标记或相关的建筑代码,
FindControl
不是递归的。看起来像
(文本框)ABC\u DV.FindControl(“txt\u updated\u time”)
返回null,这意味着
ABC\u DV.FindControl()
无法找到
txt\u updated\u time
。你能上传ABC_DV的aspx代码吗?@Bishan好的,你需要考虑
DetailsView
在试图访问控件时所处的模式,如果它不在编辑模式下,它将不存在于层次结构中,从而导致
页面加载
在没有编辑模式下调用时爆炸。向代码中添加一些检查以正确处理控件状态。几乎所有NullReferenceException的情况都是相同的。有关提示,请参阅“”。
protected void Page_Load(object sender, EventArgs e)
{
    if (ABC_DV.CurrentMode == DetailsViewMode.Edit) {
      updated_time = (TextBox)ABC_DV.FindControl("txt_updated_time");
      if(null != updated_time)
        updated_time.Text = DateTime.Now.ToString();
    }
}