none
无法获取HiddenField的值 RRS feed

  • 问题

  • 在DataList中放了一个HiddenField并绑定了数据
    <asp:DataList ID="DataList1" runat="server" DataKeyField="ID"  DataSourceID="sdsinfo">
    <ItemTemplate>
    .....
    <asp:HiddenField ID="HFfileName" runat="server" Value='<%# Eval("themefileName") %>' />
    .....
    <ItemTemplate>
    </asp:DataList> 

    //在DataList中查找HiddenField
    CS代码:
     HiddenField HF = (HiddenField)this.DataList1.FindControl("HFfileName");        
     string Selectfile =HF.Value.ToString();--说这句有错!!!

    但是运时报错了....

    未将对象引用设置到对象的实例。

    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

    异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
    源错误:

    行 37:         HiddenField HF = (HiddenField)this.DataList1.FindControl("HFfileName");
    行 38:         string Path="Theme/";
    行 39:         string Selectfile = Path + HF.Value.ToString();
    行 40:         //获取文件的名字
    行 41:         string saveFileName = HF.Value.ToString();

    堆栈跟踪:

    [NullReferenceException: 未将对象引用设置到对象的实例。]
       themeinfo.ImageButton1_Click(Object sender, ImageClickEventArgs e) in c:\Documents and Settings\斌斌\桌面\桌面美化\themeinfo.aspx.cs:39
       System.Web.UI.WebControls.ImageButton.OnClick(ImageClickEventArgs e) +86
       System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument) +115
       System.Web.UI.WebControls.ImageButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1746
    

    2009年5月22日 16:23

答案

  •     protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            HiddenField HF = (HiddenField)e.Item.FindControl("HFfileName");// 不是this.DataList1.FindControl 哦
        }

    知识改变命运,奋斗成就人生!
    • 已标记为答案 斌斌NO1 2009年5月23日 4:13
    2009年5月23日 3:56
    版主

全部回复

  • NullReferenceException表示你的代码有Bug。如果别人传给你的对象为空,你应该抛出ArgumentNullException。如果你在访问成员之前不检查对象是否为空,就会出现这种错误。
    MSMVP VC++
    2009年5月22日 19:28
    版主
  • 你的 FindContrl 没有找到控件,在 ItemDataBond 中 使用 FindControl

    知识改变命运,奋斗成就人生!
    2009年5月23日 1:25
    版主
  • 在 ItemDataBond 中 使用 FindControl也是一样的错误

    是因为DataList中会显示很多行的记录,要得到行号才能找到么?


    如果换成Repeater控件,应该可以直按找到了吧


    2009年5月23日 3:53
  •     protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            HiddenField HF = (HiddenField)e.Item.FindControl("HFfileName");// 不是this.DataList1.FindControl 哦
        }

    知识改变命运,奋斗成就人生!
    • 已标记为答案 斌斌NO1 2009年5月23日 4:13
    2009年5月23日 3:56
    版主
  • this.DataList1.FindControl
    这种写法是错误的,因为DataList1的每一行都有 HFfileName,这种方法找控件是完全错误的。你需要在绑定事件里写。就是楼上的方法
    【孟子E章】
    2009年5月23日 4:02
    版主
  • 对孟老师的敬佩与日俱增,哈哈
    授人以!
    更重要的是授人以!

    看完你每个回复都能增长不少知识,开拓不少思路
    2009年5月24日 11:16
  • 是哟,我从孟老这里得到了很多帮助,顶!
    知识改变命运,奋斗成就人生!
    2009年5月24日 12:39
    版主