0

我收到以下错误消息:

你调用的对象是空的。

代码隐藏:

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>
4

3 回答 3

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();
    }
}
于 2012-11-14T06:08:11.890 回答
0
TextBox updated_time = ABC_DV.FindControl("txt_updated_time") as TextBox;
if (updated_time  != null)
{
    updated_time.Text = DateTime.Now.ToString();
}
于 2012-11-14T05:55:30.263 回答
0

当您点击该Page_Load方法时,您的控件应该已经重建并重新添加到页面中。您此时收到错误的事实表明特定控件不存在 - 至少不存在您指定的 ID。

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

于 2012-11-14T05:55:58.690 回答