首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 有请高手“未将对象引用设置到对象的实例” [无满意答案结贴]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kx_z2007
    • 等级:
    发表于:2008-05-07 14:51:38 楼主
    未将对象引用设置到对象的实例。
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

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

    源错误:
    行 70: strPanelName = "pnlForm" + ViewState[ "CurrentPage" ];
    行 71: pnlPanel = (Panel)FindControl(strPanelName);
    行 72: pnlPanel.Visible = false;
    行 73:
    行 74: // Show Current Panel

    源程序如下:
    protected void btnNextPage_Click(object sender , System.EventArgs e)
    {
    Panel pnlPanel=new  Panel();
    string strPanelName;

    // Hide Previous Panel
    strPanelName = "pnlForm" + ViewState[ "CurrentPage" ];
    pnlPanel = (Panel)FindControl(strPanelName);
    pnlPanel.Visible = false;

    // Show Current Panel
    int currentPage = (int)ViewState["CurrentPage"];
    currentPage+=1;
    ViewState["CurrentPage"] = currentPage;
    strPanelName = "pnlForm" + ViewState[ "CurrentPage" ];
    pnlPanel = (Panel)FindControl( strPanelName );
    pnlPanel.Visi
    10  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 14:57:191楼 得分:0
    你自己看他报的是那句 没有想对象引用设置到对象的实力  你给那里打个断点 看那里的哪个对象的值是多少!
    一般着情况下!说明对象为null
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kx_z2007
    • 等级:
    发表于:2008-05-07 15:02:552楼 得分:0
    报错报的是
    行 72:  pnlPanel.Visible = false;
    这句有问题,但原因是pnlPanel未取到数值,进而问题就出在
    行 71:  pnlPanel = (Panel)FindControl(strPanelName);
    这句,这里的“strPanelName”可以取到值,但左边的“pnlPanel“始终没有数值,是不是等号右边的语句写的有问题?请高手不惜赐教。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 15:06:373楼 得分:0
    pnlPanel = (Panel)FindControl(strPanelName);

    语句有问题 , 
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 16:53:274楼 得分:0
    你调试下就可以看到  程序里pnlPanel是null
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 17:13:265楼 得分:0
    FindControl返回可能为null
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 17:15:576楼 得分:0
    (Panel)FindControl(strPanelName),
    一般都是Controls.FindControl你前面是用什么寻找控件的!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 17:17:547楼 得分:0
    引用 5 楼 xiahouwen 的回复:
    FindControl返回可能为null

    //应该就是这错误
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 17:25:488楼 得分:0
    判断一下ViewState,有可能为空
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 17:30:499楼 得分:0
    应该是ViewState[ "CurrentPage" ]的问题吧,跟踪下它的值……
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 17:53:2310楼 得分:0
    FindControl返回可能为null
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 18:59:5511楼 得分:0
    我的也出现了这样的问题,findCOntrol为空,方法没错,但就是找不到控件,不知道是什么问题,关注一下。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 21:27:0712楼 得分:0
    把71和72行改一下:
    if (FindControl(strPanelName) != null)
    {
    pnlPanel = (Panel)FindControl(strPanelName);
    pnlPanel.Visible = false;
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kx_z2007
    • 等级:
    发表于:2008-05-08 09:56:4813楼 得分:0
        按各位的指点我又试了试的确是“FindControl返回为null”,但现在的问题是怎样写能使其不为NULL呢?正如bobo_555所说的那样,方法应该没有问题但就是找不到控件。我最近baidu和Google了很多相关的网页,网上虽然早有人提出了类似的问题但是一直没有有效解决的方法,请大家能否给出一个可行的解决办法,再次感谢!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-08 13:48:3214楼 得分:0
    正如6楼所说,FindControl前应该加上控件所在的上一级控件的ID,
    也就是说“ (Panel)FindControl(strPanelName);”  这里的 strPanelName 你有可能放在其他控件中了
    你把前台代码放出来看看吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kx_z2007
    • 等级:
    发表于:2008-05-08 14:29:2215楼 得分:0
    OK!按照大家所说的,前台代码如下:
    <form id="Form1" method="post" runat="server">
      <asp:Panel id="pnlForml" runat="server">
        <H3>Page <%=ViewState["CurrentPage"]%> of 3 </H3>
        <HR>
        First Name:
        <asp:TextBox id="txtFirstname" runat="server"> </asp:TextBox>
        <HR>
        Last Name:
        <asp:TextBox id="txtLastname" runat="server"> </asp:TextBox>
        <HR>
        <asp:Button id="Button1" onclick="btnNextPage_Click" runat="server" Text="Next Page>>"> </asp:Button>
      </asp:Panel>
      <asp:Panel id="pnlForm2" runat="server" Visible="False">
        <H3>Page <%=ViewState["CurrentPage"]%>of 3 </H3>
        <HR>
        Favorite Color:
        <asp:TextBox id="txtFavColor" runat="server"> </asp:TextBox>
        <HR>
        <asp:Button id="Button2" onclick="btnPrevPage_Click" runat="server" Text=" < <Prev Page"> </asp:Button>
        <asp:Button id="Button3" onclick="btnNextPage_Click" runat="server" Text="Next Page"> </asp:Button>
      </asp:Panel>
      <asp:Panel id="pnlForm3" runat="server" Visible="False">
        <H3>Page <%=ViewState["CurrentPage"]%>of 3 </H3>
        <HR>
        Favorite Philosopher:
        <asp:RadioButtonList id="radlFavPhilosopher" runat="server">
    <asp:ListItem Value="Frege" Selected="True">Frege </asp:ListItem>
            <asp:ListItem Value="Russell">Russell </asp:ListItem>
    <asp:ListItem Value="Carnap">Carnap </asp:ListItem>
        </asp:RadioButtonList>
        <HR>
        <asp:Button id="Button4" onclick="btnPrevPage_Click" runat="server" Text=" < <Prev Page"> </asp:Button>
        <asp:Button id="Button5" onclick="btnFinish_Click" runat="server" Text="Finish"> </asp:Button>
      </asp:Panel>
      <asp:Panel id="pnlForm4" runat="server" Visible="False">
        <asp:Label id="lblSummary" runat="server"> </asp:Label>
      </asp:Panel>
    </form>
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-09 10:34:0616楼 得分:0
    楼主的意思是要隐藏掉某个Panel吧,
    看代码,这些Panel都是直接在Page对象下的,所以FindControl前省略掉Page也是可以的

    行 70:  strPanelName = "pnlForm" + ViewState[ "CurrentPage" ];
    你看一下这里的strPanelName, ViewState[ "CurrentPage" ] 是否有值,如果有值是什么
    还发现一个问题:第一个Panel的ID <asp:Panel id="pnlForml" runat="server">
    是数字1,还是英文l
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kx_z2007
    • 等级:
    发表于:2008-05-10 21:41:2317楼 得分:0
    我跟了一下程序,这里“CurrentPage”的值是1,也就是strPanelName 的值是pnlForm1,对了这里的是数字1而不是字母L.
    <asp:Panel id="pnlForml" runat="server">里的pnlForml同样是数字1而不是字母L.
    现在的关键是
    行 71:  pnlPanel = (Panel)FindControl(strPanelName);
    中的pnlPanel 取不到值.一直不知道该怎么解决,请高手们指点个方法.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • skyaspnet
    • 等级:
    发表于:2008-05-11 00:05:3218楼 得分:0
    以前遇到过这个问题, 可以这样试一下:

    先把strPanelName表示的控件类型设置一个控件变量(Panel类型控件名),

    然后设置它的ID为strPanelName, 再将pnlPanel = (Panel)FindControl(strPanelName);改为

    pnlPanel = (Panel)FindControl(控件变量); 

    你试一下吧

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 10:11:5719楼 得分:0
    引用 17 楼 kx_z2007 的回复:
    我跟了一下程序,这里“CurrentPage”的值是1,也就是strPanelName 的值是pnlForm1,对了这里的是数字1而不是字母L.
    <asp:Panel id="pnlForml" runat="server">里的pnlForml同样是数字1而不是字母L.
    。。。


    兄弟,你看清楚啦,这里的pnlForml 明显的不是数字1嘛,要不就是你的输入法的问题,反正肯定不是数字1,
    你改一下应该就会好啦
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-12 22:35:4420楼 得分:0
    先看看是不是输入错误..
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 08:07:1921楼 得分:0
    学习
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kx_z2007
    • 等级:
    发表于:2008-05-13 16:15:2422楼 得分:0
    谢谢提醒,的确是粗心大意把pnlform1写成了pnlforml了!以后一定小心注意,可现在改过来之后又出现了如下的错误:

    异常详细信息: System.InvalidCastException: 指定的转换无效。
    源错误:
    行 70: // Hide Previous Panel
    行 71: strPanelName = "pnlForm" + ViewState[ "CurrentPage" ];
    行 72: pnlPanel = (Panel)FindControl( strPanelName );
    行 73: pnlPanel.Visible = false;

    具体的就是 行 72: pnlPanel = (Panel)FindControl( strPanelName );的Panel强制转换出错,再次请各位高手指导。


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 22:49:4123楼 得分:0
    出现这种情况想到就是用的对象值为空
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved