...
    protected System.Web.UI.WebControls.Label ip;
    protected System.Web.UI.WebControls.Label text;
    protected System.Web.UI.WebControls.HyperLink hl3;
    protected System.Web.UI.WebControls.HyperLink hl4;
...
if(Session["admin_name"]!=null)
{
ip.Visible = true;
text.Visible = false;
hl3.Enabled = true;
hl4.Enabled = true;
}
...
出现的问题:
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。行 38:  ip.Visible = true;
源文件: f:\down\msgbook\index.aspx.cs    行: 38 

解决方案 »

  1.   

    <asp:Label id="ip" runat="server">
    runat="server"是不是写了?
      

  2.   

    ip控件你在设计的时候是visual=false吧
    如果是这样
    那么在页面初始化的时候是不存在这个控件的
    所以出错
      

  3.   

    猜测:估计你的Session["admin_name"]没有赋值,
    在你出错那句前面加上
    Response.Write(Session["admin_name"].ToString());
    看看此时你的Session["admin_name"]是什么值?
      

  4.   

    runat="server" 写了ip控件在设计的时候是visual=false,但是改了后还是一样的问题Session["admin_name"] 赋值了没用过  Session.add() 源代码中去掉上述 if 那条语句这些代码后,运行是对的
      

  5.   

    <table border="1" cellpadding="0" cellspacing="0" bordercolor="lavender" width="900">
    <tr>
    <td colspan="3"><table>
    <tr>
    <td><asp:HyperLink ID="link1" Runat="server" NavigateUrl="index.aspx">留言本首页</asp:HyperLink>§</td>
    <td><asp:HyperLink ID="link5" Runat="server" NavigateUrl="leavemsg.aspx">发表留言</asp:HyperLink>§</td>
    <td><asp:HyperLink ID="link2" Runat="server" NavigateUrl="search.aspx">留言搜索</asp:HyperLink>§</td>
    <td><asp:HyperLink ID="link4" Runat="server" NavigateUrl="help.aspx">留言帮助</asp:HyperLink>§</td>
    <td><asp:HyperLink ID="link6" Runat="server" NavigateUrl="adminlogin.aspx">管理登陆</asp:HyperLink></td>
    </tr>
    </table>
    </td>
    </tr>
    <asp:Repeater id="rep" runat="server">
    <HeaderTemplate>
    <tr>
    <td colspan="3">&nbsp;</td>
    </tr>
    <tr bgcolor="Lavender">
    <td width="900" colspan="3">&nbsp;</td>
    </tr>
    </HeaderTemplate>
    <ItemTemplate>
    <tr>
    <td width="110" align="center">【
    <%#DataBinder.Eval(Container.DataItem,"ler")%>

    </td>
    <td width="690"><%#DataBinder.Eval(Container.DataItem,"ltitle")%>
    </td>
    <td width="100" align="center">
    <asp:HyperLink ID=hl1 Runat=server NavigateUrl='<%#"mailto:"+DataBinder.Eval(Container.DataItem,"lemail")%>'>E-mail</asp:HyperLink>
    <asp:HyperLink ID=hl2 Runat=server NavigateUrl='<%#DataBinder.Eval(Container.DataItem,"lhome")%>' Target=_blank>主页</asp:HyperLink></td>
    </tr>
    <tr>
    <td width="110" rowspan="2" height="100" bgcolor="Lavender" valign="middle" align="center"><img src='pic/<%#DataBinder.Eval(Container.DataItem,"lhead")%>' width=99 height=99 alt='<%#DataBinder.Eval(Container.DataItem,"lsex")%>'>
    </td>
    <td width="790" height="100" colspan="2" valign="top" onMouseOver=this.style.backgroundColor="AliceBlue" onMouseOut=this.style.backgroundColor=''>
    <%#DataBinder.Eval(Container.DataItem,"lcontent")%>
    </td>
    </tr>
    <tr>
    <td width="690">留言者来自:<%#DataBinder.Eval(Container.DataItem,"lcome")%>
    | 留言者IP:
    <asp:Label ID="text" Runat="server">已经记录</asp:Label>
    <asp:Label ID="ip" Runat="server"><%#DataBinder.Eval(Container.DataItem,"lip")%></asp:Label>
    | 留言时间:<%#DataBinder.Eval(Container.DataItem,"ldate")%>
    </td>
    <td width="100" align="center">
    <asp:HyperLink ID="hl3" Runat="server" NavigateUrl='<%#"reply.aspx?topicid="+DataBinder.Eval(Container.DataItem,"lid")%>'>回复</asp:HyperLink>
    |
    <asp:HyperLink ID="hl4" Runat="server" NavigateUrl='<%#"delete.aspx?topicid="+DataBinder.Eval(Container.DataItem,"lid")%>'>删除</asp:HyperLink></td>
    </tr>
    </ItemTemplate>
    <FooterTemplate>
    <tr bgcolor="Lavender">
    <td width="900" colspan="3">&nbsp;</td>
    </tr>
    </FooterTemplate>
    </asp:Repeater></table>以上是 .aspx 页面的主要代码
    这些是 Codebehind 部分的
    if(Session["admin_name"]!=null)
    {
    ip.Visible = true;
    text.Visible = false;
    hl3.Enabled = true;
    hl4.Enabled = true;
    }            Conn = new SqlConnection("server=(local);database=webdata;uid=sa;pwd=''");
    SqlDataAdapter cm = new SqlDataAdapter("select * from msgbook order by lid desc",Conn);
    DataSet ds = new DataSet();
    cm.Fill(ds,"msgbook");
    rep.DataSource = ds.Tables["msgbook"].DefaultView;
    rep.DataBind();
      

  6.   

    好像还少了 
    else
    {
    ip.Visible = false;
    text.Visible = true;
    hl3.Enabled = false;
    hl4.Enabled = false;
    }
      

  7.   

    代码没有错  是因为你编译后Session["admin_name"]没有了 你编译后重新登陆一下就不会出现这问题了      
      

  8.   

    应该这样写
    if(!(Session["admin_name"]==null))
    {
    ip.Visible = true;
    text.Visible = false;
    hl3.Enabled = true;
    hl4.Enabled = true;
    }
      

  9.   

    改成这样:Session["admin_name"].ToString()!=null
      

  10.   

    晕,看错了。
    你这样试一下
    if(Session["admin_name"].ToString()+"a"!="a")
      

  11.   

    好像不是这个问题
    我弄了很久,找到问题在哪里了    protected System.Web.UI.WebControls.Label ip;
        protected System.Web.UI.WebControls.Label text;
        protected System.Web.UI.WebControls.HyperLink hl3;
        protected System.Web.UI.WebControls.HyperLink hl4;上面这些因为放在 Repeater 里面,原来没有自己生成,是我加上去的这样的话这几个控件事实上没有被加载,而我却使用了,所以出错,但是我改不对啊,还是得请大家帮忙啊
      

  12.   

    这几个控件是在Repeater 的子控件
    不用自定义吧
    因为若有多个记录就会生成多个控件
    看看
    Repeater.Controls 属性 吧
      

  13.   

    应该从Repeater.Items.Controls里引用
      

  14.   

    我用 Response.Write(rep.HasControls());
     查看过了,显示的是 false;
      

  15.   

    单独把它Session["admin_name"].ToString()赋给变量,然后在if()里面调用变量试试
      

  16.   

    要达到楼住的要求应该在Repeater.OnItemCreated 方法里实现
      

  17.   

    private void Repeater1_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
    {
        if(...)//条件
        {
            Label myIp=(Label)e.Item.FindControl("ip");
            myIp.Visible=true;
        }
    }
      

  18.   

    protected System.Web.UI.WebControls.Label ip;//去掉这些
      

  19.   

    在设计视窗中,选中你的Repeater,选择属性>事件(有闪电符号的哪个)>行为,双击ItemDataBound就可以!
      

  20.   

    还有一个问题
    <asp:Label ID="ip" Runat="server"><%#DataBinder.Eval(Container.DataItem,"lip")%></asp:Label>
    最好改成
    <asp:Label ID="ip" Runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"lip")%>'></asp:Label>
      

  21.   

    楼主要动态填加控件到repeater中,这样用 y3q3(爱“猪”的人)可以访问到,如果楼主仅仅是手工填加的话,填加的是静态的,而且你的ip控件是整个page页的实际上在repeater中的对象理论上应该在repeater内部定义,如果采用脚本写表格就没这些问题。
    具体的可以查找msdn