[英]Can't get my DropDownListFor to select a selected SelectListItem item in a Dropdown menu
[英]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
我找到了一個適合我的解決方案。 我遇到了這篇文章,它本身並沒有直接幫助我:
但我注意到有一些跡象表明該項目必須首先設置為可選。 我在其他帖子中看到過這個,但忽略了它,因為當我搜索時我發現我沒有明確地將任何東西設置為不可選擇。
盡管如此,當我添加這一行時,一切正常,所有頁面都可以訪問並且所有錯誤都消失了。 添加了下面標記為新的行。 . .
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.