如何删除现有的菜单项一旦删除ASP.NET C#

时间:2014-01-12 18:47:10

标签: c# asp.net menu navigation menuitem

我尝试在删除后添加一个菜单项。我使用以下代码删除了该项目:

NaviMenu.Items.Remove(NaviMenu.Items[1]);

ASP.NET项目是在框架4.5上创建的,项目也是在Visual Studio 2012中创建的。

该控件是一个ASP.NET菜单控件System.Web.UI.WebControls.Menu,不要与System.Windows.Forms.ContextMenuStrip混淆.Web菜单和Windows窗体菜单不相同,并且具有不同的属性。

我还希望将该项目恢复到原始位置。菜单项默认情况下已在菜单中。无论如何还原菜单项而不必重新添加所有内容,如导航URL,Vaule等?

这个想法是在加载页面时删除菜单项。用户登录网站后,菜单中的某些项目将被添加回用户。

1 个答案:

答案 0 :(得分:1)

编辑:我走错了路,所以我正在取代整个答案。

好吧,看起来System.Web.Ui.WebControls.MenuItem似乎不包含隐藏/取消隐藏的选项,尽管Menu会这样做。这真是愚蠢。

没有简单的答案,有不同的方法来实现这一点。最重要的是你需要:

1)保持要删除的菜单项对象。您不仅可以从菜单中引用该对象

2)跟踪每个项目的菜单位置。

所以,我的新策略是......你应该有一个负责创建菜单的方法。它就像这样......

public class MyMenuItem
{
    public bool ShowWhenNotLoggedIn { get; set; }
    public System.Web.UI.WebControls.MenuItem MenuItem { get; set; }
}

List<MyMenuItem> MyMenuItems = new List<MyMenuItem>(); //Create all your menu items and put them in here before running the menthod below
void CreateMyMenu(bool IsUserLoggedIn)
{
    MyMenu.Items.Clear();
    foreach (MyMenuItem item in MyMenuItems)
    {
        if (item.ShowWhenNotLoggedIn || IsUserLoggedIn)
            MyMenu.Items.Add(item.MenuItem);
    }
}

所以,我喜欢的是你不必经常记住物品的顺序。你只需清理并重新创建整个菜单。它的效率略低于只删除/添加你想要的项目,但它更容易阅读和理解代码。我认为性能影响值得使代码可读,但这是你的决定。

另请注意,这有点像State Pattern-lite。我们已经定义了两种状态:登录和未登录。我们已经在受这些状态影响的对象(菜单项)上定义了这些状态。所以,一旦你编写了这个逻辑,你就不必再详述每个菜单项了。你只是声明你处于一个新的状态,每个人都相应地更新自己。如果您有其他逻辑依赖于登录而未登录,您可以对它们执行相同的操作。