簡體   English   中英

無法選擇禁用或不可選擇的菜單項

[英]Can't select a disabled or unselectable menu item

我正在部署一個我一直在使用的解決方案,該解決方案在使用IIS內置的 Visual Studio 進行調試時沒有出現問題。 我在同一台服務器上部署了兩個類似的項目,它們具有類似的菜單結構,它們在ASP4.0 MSServer2012R2 SQL2018 出於某種原因,對於這個新項目,無論我是在localhost運行還是通過 url 訪問新站點,我都可以訪問主頁並登錄(表明我的數據庫連接和權限都正常),但是當我單擊任何菜單欄中的嵌套鏈接,出現錯誤:

無法選擇禁用或不可選擇的菜單項。 錯誤

我發現了一些關於此錯誤的信息,但一切都指向明確設置“已選擇”和“已啟用”的問題。 這不是這里的情況。 我確實啟用了基於角色的身份驗證,但如果它是頂級菜單項,則可以使用。 一旦我嵌套菜單,我就會遇到這個問題。

這將導致以下問題

<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode title="Home" url="~/">
  <!--  <siteMapNode title="Home" url="~/Default.aspx">
    </siteMapNode>   -->
    <siteMapNode title="Get Started" roles="Recruiter,Student,SuperUser">
      <siteMapNode title="About us" url="~/AboutUs.aspx"></siteMapNode>
      <siteMapNode title="Help" url="~/Help.aspx" roles="Recruiter"></siteMapNode>
      <siteMapNode title="Resources" url="~/Resources.aspx"></siteMapNode>
    </siteMapNode>
    <siteMapNode title="Manage Users" url="~/ManageUsers.aspx" roles="Administrator,SuperUser">
    </siteMapNode>
  </siteMapNode>
</siteMap>

這下面將起作用:

<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
  <siteMapNode title="Home" url="~/">
  <!--  <siteMapNode title="Home" url="~/Default.aspx">
    </siteMapNode>   -->

  <siteMapNode title="About us" url="~/AboutUs.aspx"     roles="Administrator,User,SuperUser"></siteMapNode>
  <siteMapNode title="Help" url="~/Help.aspx" roles="Administrator,SuperUser,User"></siteMapNode>
  <siteMapNode title="Resources" url="~/Resources.aspx"></siteMapNode>

  <siteMapNode title="Manage Users" url="~/ManageUsers.aspx" roles="Administrator,SuperUser">
  </siteMapNode>
</siteMapNode>

站點地圖綁定:

<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" ShowStartingNode="false" />

<div class="navbar navbar-inverse navbar-fixed-top">
    <div class="container">
        <div class="navbar-brand navbar-header">
                <asp:Menu ID="MasterPageMenu" runat="server" DataSourceID="SiteMapDataSource1" Orientation="Horizontal" OnMenuItemDataBound="MasterPageMenu_MenuItemDataBound">
                    <DynamicHoverStyle ForeColor="White"  />
                    <LevelMenuItemStyles>
                        <asp:MenuItemStyle CssClass="main_menu" />
                        <asp:MenuItemStyle CssClass="level_menu" />
                    </LevelMenuItemStyles>
                    <StaticHoverStyle ForeColor="White" />
               </asp:Menu>
        </div>

這是背后的代碼:

protected void MasterPageMenu_MenuItemDataBound(object sender, MenuEventArgs e)
{
    if (SiteMap.CurrentNode != null)
    {
        if (e.Item.Text == SiteMap.CurrentNode.Title)
        {
            if (e.Item.Parent != null)
            {
                e.Item.Parent.Selected = true;
            }
            else
            {
                e.Item.Selected = true;
            }
        }
    }
}

我現在已經花了幾天的時間,知道這會很簡單。 . .但我的頭撞在牆上。 . 。有什么想法嗎?

--Adding 3/10/20 這是完整的 IIS 錯誤:

[InvalidOperationException: Can't select a disabled or unselectable menu item.]
   System.Web.UI.WebControls.Menu.SetSelectedItem(MenuItem node) +3099842
   myNewSite.SiteMaster.MasterPageMenu_MenuItemDataBound(Object sender, MenuEventArgs e) in C:\Users\Gary\Documents\Gary\Trusted\uShine\Site.Master.cs:94
   System.Web.UI.WebControls.Menu.OnMenuItemDataBound(MenuEventArgs e) +139
   System.Web.UI.WebControls.Menu.DataBindRecursive(MenuItem node, IHierarchicalEnumerable enumerable) +2950
   System.Web.UI.WebControls.Menu.DataBindRecursive(MenuItem node, IHierarchicalEnumerable enumerable) +3030
   System.Web.UI.WebControls.Menu.DataBindItem(MenuItem item) +428
   System.Web.UI.WebControls.Menu.PerformDataBinding() +142
   System.Web.UI.WebControls.HierarchicalDataBoundControl.PerformSelect() +141
   System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +134
   System.Web.UI.WebControls.Menu.EnsureDataBound() +28
   System.Web.UI.WebControls.Menu.OnPreRender(EventArgs e) +37
   System.Web.UI.Control.PreRenderRecursiveInternal() +132
   System.Web.UI.Control.PreRenderRecursiveInternal() +227
   System.Web.UI.Control.PreRenderRecursiveInternal() +227
   System.Web.UI.Control.PreRenderRecursiveInternal() +227
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4005

我找到了一個適合我的解決方案。 我遇到了這篇文章,它本身並沒有直接幫助我:

ASP.net 菜單 CSS 父節點選擇的樣式沒有 URL

但我注意到有一些跡象表明該項目必須首先設置為可選。 我在其他帖子中看到過這個,但忽略了它,因為當我搜索時我發現我沒有明確地將任何東西設置為不可選擇。

盡管如此,當我添加這一行時,一切正常,所有頁面都可以訪問並且所有錯誤都消失了。 添加了下面標記為新的行。 . .

if (SiteMap.CurrentNode != null)
{
  if (e.Item.Text == SiteMap.CurrentNode.Title)
  {
     if (e.Item.Parent != null)
     {
        e.Item.Parent.Selectable = true; //New GCS20200310
        e.Item.Parent.Selected = true;
     }
     else
     {
         e.Item.Selectable = true;  //New GCS20200310
         e.Item.Selected = true;
     }
   }
}

什么對我來說很有趣。 . .我還是不明白。 . . 如果我沒有明確設置它們,為什么這些頁面是不可選擇的。 . . 再次,僅當它們是嵌套的站點節點時。 如果沒有進一步的證據,似乎嵌套站點節點的行為使其默認無法選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM