Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法选择已禁用或不可选择的菜单项_C#_Asp.net_Iis - Fatal编程技术网

C# 无法选择已禁用或不可选择的菜单项

C# 无法选择已禁用或不可选择的菜单项,c#,asp.net,iis,C#,Asp.net,Iis,我正在部署一个解决方案,我一直在使用内置IIS的VisualStudio进行调试。我在同一台服务器上部署了两个类似的项目,它们具有类似的菜单结构,可以很好地运行ASP4.0 MSServer2012R2 SQL2018。出于某种原因,在这个新项目中,无论我是在localhost中运行还是通过url访问新站点,我都能够点击主页并登录,表明我的DB连接和权限都正常,但当我单击菜单栏中的任何嵌套链接时,我会得到错误: 无法选择已禁用或不可选择的菜单项。错误 我在这个错误上发现了一点,但是所有的问题都指

我正在部署一个解决方案,我一直在使用内置IIS的VisualStudio进行调试。我在同一台服务器上部署了两个类似的项目,它们具有类似的菜单结构,可以很好地运行ASP4.0 MSServer2012R2 SQL2018。出于某种原因,在这个新项目中,无论我是在localhost中运行还是通过url访问新站点,我都能够点击主页并登录,表明我的DB连接和权限都正常,但当我单击菜单栏中的任何嵌套链接时,我会得到错误:

无法选择已禁用或不可选择的菜单项。错误

我在这个错误上发现了一点,但是所有的问题都指向了明确设置了Selected和Enabled的地方。这里的情况并非如此。我确实启用了基于角色的身份验证,但如果它是顶级菜单项,则可以使用。一旦我嵌套了菜单,我就得到了这个问题

这将导致以下问题

<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>
我已经花了几天的时间在这个问题上,我知道这将是一件简单的事情。但是我的头撞在墙上。有什么想法吗

-添加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;
     }
   }
}

我感兴趣的是。我还是不明白。如果我没有明确设置这些页面,为什么这些页面是不可选择的。同样,仅当它们是嵌套的sitenodes时。在没有进一步证据的情况下,嵌套sitenode的行为似乎会使其在默认情况下不可选择。

您在F12开发者工具中看到任何错误消息吗?此外,您是否在事件查看器中看到一些错误?我使用你的代码在我这边,但我不能重现这个问题,即使我在IIS主机。谢谢你的尝试。这至少有助于我验证这种方法是正确的。开发工具中没有显示任何内容,或者我应该说从IIS中得到的错误似乎是最有启发性的。我一直在添加调试语句,试图缩小问题范围。现在是开始解构的时候了!这太奇怪了,因为我无法在我这边重现这个问题。您是否已定义使用xmlsitemap提供程序而不是mysqlsitemapprovider?听起来好像数据绑定出了问题。
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;
            }
        }
    }
}
[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;
     }
   }
}