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();
}
}