...
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
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
runat="server"是不是写了?
如果是这样
那么在页面初始化的时候是不存在这个控件的
所以出错
在你出错那句前面加上
Response.Write(Session["admin_name"].ToString());
看看此时你的Session["admin_name"]是什么值?
<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"> </td>
</tr>
<tr bgcolor="Lavender">
<td width="900" colspan="3"> </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"> </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();
else
{
ip.Visible = false;
text.Visible = true;
hl3.Enabled = false;
hl4.Enabled = false;
}
if(!(Session["admin_name"]==null))
{
ip.Visible = true;
text.Visible = false;
hl3.Enabled = true;
hl4.Enabled = true;
}
你这样试一下
if(Session["admin_name"].ToString()+"a"!="a")
我弄了很久,找到问题在哪里了 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 里面,原来没有自己生成,是我加上去的这样的话这几个控件事实上没有被加载,而我却使用了,所以出错,但是我改不对啊,还是得请大家帮忙啊
不用自定义吧
因为若有多个记录就会生成多个控件
看看
Repeater.Controls 属性 吧
查看过了,显示的是 false;
{
if(...)//条件
{
Label myIp=(Label)e.Item.FindControl("ip");
myIp.Visible=true;
}
}
<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>
具体的可以查找msdn