我收到以下错误消息:
对象引用未设置为对象的实例。
代码隐藏:
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>
答案 0 :(得分:1)
好的,您需要考虑DetailsView
在尝试访问控件时所处的模式,如果它不处于导致Page_Load
的编辑模式,它将不会存在于层次结构中在编辑模式下没有DetailsView
的情况下调用它时会爆炸。在代码中添加一些检查以正确处理控件状态。
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();
}
}
答案 1 :(得分:0)
TextBox updated_time = ABC_DV.FindControl("txt_updated_time") as TextBox;
if (updated_time != null)
{
updated_time.Text = DateTime.Now.ToString();
}
答案 2 :(得分:0)
当您点击Page_Load
方法时,您的控件应该已经重建并添加回页面。您在此时收到错误的事实表明特定控件不存在 - 至少不存在您指定的ID。
尝试将代码移动到PreRender()
中 - 这是在页面呈现到响应流之前执行的方法,如果您添加了动态控件或者与控件的ID混淆那么应该具有在这个阶段之前发生的很好。