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 に答える