前台代码:
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="site.master.cs" Inherits="site" %>
<link rel=stylesheet href="style\site.css" type="text/css">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>办公用品管理系统</title>
    <asp:ContentPlaceHolder id="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
    <div id="back">
    <div id="banner">
    <div id="userstatusback">
    <div id="userstatus">&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp欢迎&nbsp&nbsp&nbsp<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        <asp:LinkButton ID="LinkButton1" runat="server" onclick="LinkButton1_Click">注销</asp:LinkButton>
        </div>
    </div>
    </div>
    <div id="bar">
        <asp:Menu ID="Menu1" runat="server" Orientation="Horizontal" 
            MaximumDynamicDisplayLevels="10" ForeColor="#284E98" BackColor="#B5C7DE" 
            DynamicHorizontalOffset="2" Font-Names="Verdana" Font-Size="0.8em" 
            StaticSubMenuIndent="10px">
            <StaticSelectedStyle BackColor="#507CD1" />
            <StaticMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
            <DynamicHoverStyle BackColor="#284E98" ForeColor="White" />
            <DynamicMenuStyle BackColor="#B5C7DE" />
            <DynamicSelectedStyle BackColor="#507CD1" />
            <DynamicMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
            <StaticHoverStyle BackColor="#284E98" ForeColor="White" />
        <Items>
        <asp:MenuItem Text="首页" NavigateUrl="~/index.aspx" >
            </asp:MenuItem>
            <asp:MenuItem Text="办公物品管理" Value="办公物品管理" Selectable="False">
                <asp:MenuItem NavigateUrl="~/Itemlist.aspx" Text="库存办公用品列表" Value="库存办公用品列表">
                </asp:MenuItem>
                <asp:MenuItem NavigateUrl="~/Additem.aspx" Text="录入办公用品" Value="录入办公用品">
                </asp:MenuItem>
                <asp:MenuItem NavigateUrl="~/Changeitem.aspx" Text="修改办公用品" Value="修改办公用品">
                </asp:MenuItem>
                <asp:MenuItem NavigateUrl="~/Delitem.aspx" Text="删除办公用品" Value="删除办公用品">
                </asp:MenuItem>
                <asp:MenuItem NavigateUrl="~/itemuse.aspx" Text="办公用品领用" Value="办公用品领用">
                </asp:MenuItem>
                <asp:MenuItem NavigateUrl="~/itemuselist.aspx" Text="在用办公用品列表" Value="在用办公用品列表">
                </asp:MenuItem>
                <asp:MenuItem NavigateUrl="~/delitemuser.aspx" Text="删除办公用品领用记录" 
                    Value="删除办公用品领用记录"></asp:MenuItem>
            </asp:MenuItem>
            <asp:MenuItem Text="办公用品类别管理" Value="办公用品类别管理" Selectable="False">
                <asp:MenuItem NavigateUrl="~/Classlist.aspx" Text="办公用品类别列表" Value="办公用品类别列表">
                </asp:MenuItem>
                <asp:MenuItem NavigateUrl="~/Addclass.aspx" Text="增加类别" Value="增加类别">
                </asp:MenuItem>
                <asp:MenuItem NavigateUrl="~/Changeclass.aspx" Text="修改类别" Value="修改类别">
                </asp:MenuItem>
            </asp:MenuItem>
            <asp:MenuItem Text="用户管理" Value="用户管理" Selectable="False">
                <asp:MenuItem NavigateUrl="~/Userlist.aspx" Text="用户列表" Value="用户列表">
                </asp:MenuItem>
                <asp:MenuItem NavigateUrl="~/Adduer.aspx" Text="增加用户" Value="增加用户">
                </asp:MenuItem>
                <asp:MenuItem NavigateUrl="~/Changeuser.aspx" Text="修改用户" Value="修改用户">
                </asp:MenuItem>
            </asp:MenuItem>
        </Items>
        </asp:Menu>
    </div>
    <div id="deback">
        <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
        </asp:ContentPlaceHolder>
    </div>
    <div id="end">
      <div id="line"></div><table width="100%"><tr><td height="1px" width="100%" bgcolor="black"></td></tr></table></div>
      <div id="info">请使用IE浏览器以获得最佳效果<br />
          退出只需关闭浏览器即可</div>
    </div>
    </form>
</body>
</html>后台代码:
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;public partial class site : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string key = "userkey";
        string key2 = "authority";
        if (Session[key] == null)
        {
            Response.Redirect("default.aspx");
        }
        Label1.Text = Session[key].ToString();
        if ((int)Session[key2]!=1)
        {
            Menu1.FindItem(@"用户管理").ChildItems.Remove(Menu1.FindItem(@"用户管理/增加用户"));
            Menu1.FindItem(@"办公物品管理").ChildItems.Remove(Menu1.FindItem(@"办公物品管理/录入办公用品"));
            Menu1.FindItem(@"办公物品管理").ChildItems.Remove(Menu1.FindItem(@"办公物品管理/修改办公用品"));
            Menu1.FindItem(@"办公物品管理").ChildItems.Remove(Menu1.FindItem(@"办公物品管理/删除办公用品"));
            Menu1.FindItem(@"办公物品管理").ChildItems.Remove(Menu1.FindItem(@"办公物品管理/删除办公用品领用记录"));
            Menu1.FindItem(@"办公用品类别管理").ChildItems.Remove(Menu1.FindItem(@"办公用品类别管理/增加类别"));
            Menu1.FindItem(@"办公用品类别管理").ChildItems.Remove(Menu1.FindItem(@"办公用品类别管理/修改类别"));
        }
    }
    protected void LinkButton1_Click(object sender, EventArgs e)
    {
        Session.Clear();
        Session.RemoveAll();
        Session.Abandon();
        Response.Redirect("default.aspx");
    }
}错误页面:
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------值不能为空。
参数名: value 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.ArgumentNullException: 值不能为空。
参数名: value源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。  堆栈跟踪: 
[ArgumentNullException: 值不能为空。
参数名: value]
   System.Web.UI.WebControls.MenuItemCollection.Remove(MenuItem value) +1212811
   site.Page_Load(Object sender, EventArgs e) +225
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +50
   System.Web.UI.Control.LoadRecursive() +141
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627 
--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.3074; ASP.NET 版本:2.0.50727.3074 

解决方案 »

  1.   

    补充说明一下,LinkButton1_Click()中不论写什么代码得到的结果都是一样的。但当把
                Menu1.FindItem(@"用户管理").ChildItems.Remove(Menu1.FindItem(@"用户管理/增加用户"));
                Menu1.FindItem(@"办公物品管理").ChildItems.Remove(Menu1.FindItem(@"办公物品管理/录入办公用品"));
                Menu1.FindItem(@"办公物品管理").ChildItems.Remove(Menu1.FindItem(@"办公物品管理/修改办公用品"));
                Menu1.FindItem(@"办公物品管理").ChildItems.Remove(Menu1.FindItem(@"办公物品管理/删除办公用品"));
                Menu1.FindItem(@"办公物品管理").ChildItems.Remove(Menu1.FindItem(@"办公物品管理/删除办公用品领用记录"));
                Menu1.FindItem(@"办公用品类别管理").ChildItems.Remove(Menu1.FindItem(@"办公用品类别管理/增加类别"));
                Menu1.FindItem(@"办公用品类别管理").ChildItems.Remove(Menu1.FindItem(@"办公用品类别管理/修改类别"));这段代码删掉以后,就不会出错了。
      

  2.   

    Session.Clear();
            Session.RemoveAll();
            Session.Abandon();怎么这么多。
      

  3.   

    你把那一段话放进if(!Page.IsPostBack){...} 里面。因为你现在的写法是每次回发都执行,第一次页面载入时已经删掉了,第二次再执行当然会的空引用的错误。这跟linkbutton没关系。
      

  4.   

    PageLoad里面的代码是每次回发都执行的,点击按钮之前也会先执行它们。
      

  5.   

    那几句只要一句就够了吗,是我测试的时候留下来忘记删了,但是问题和那几句没关系啊。即使
        protected void LinkButton1_Click(object sender, EventArgs e)
        {    }这么写依然出错。