导航站点MathPath

Posted

技术标签:

【中文标题】导航站点MathPath【英文标题】:Navigation SiteMathPath 【发布时间】:2011-03-25 20:13:22 【问题描述】:

我的应用程序有许多不同的用户,目前为他们设置了不同的母版页。这个想法是针对系统中的某种类型的面包屑导航,即主页 > 详细信息 > ...

对此最好的方法是什么?我想我需要在 Web.sitemap(将有多个 SiteMapPaths)中定义每个用户可以拥有的单独路径(他们可以查看的所有页面),然后将站点地图控件添加到 masterpage 并将它们链接到适当的 SiteMapPath,这听起来像是处理这个问题的正确方法吗?

我在母版页中设置 SiteMapPath 时遇到问题。我使用下面的教程http://geekswithblogs.net/azamsharp/archive/2006/08/16/88197.aspx尝试使用该控件,但是我登录时主页上没有显示SiteMapPath控件,您知道可能是什么问题吗?

Web.sitemap:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >

      <siteMapNode url="home.aspx" title=""  description="">
        <siteMapNode url="contacts.aspx" title=""  description="">   
    </siteMapNode>

</siteMap>

在母版页上:

<asp:SiteMapPath ID="SiteMapPath1" runat="server">

          <RootNodeTemplate>

          <asp:HyperLink ID="HyperLink1" runat="server"
          Text='<%# Eval("title") %>' NavigateUrl='<%# Eval("url") %>' />

          </RootNodeTemplate>

          <NodeTemplate>
            <asp:HyperLink ID="HyperLink2" runat="server"
            Text='<%# Eval("title") %>' NavigateUrl='<%# Eval("url") %>' />
          </NodeTemplate>

          </asp:SiteMapPath>

谢谢

【问题讨论】:

【参考方案1】:

如果您使用 FormsAuthentication 来控制用户对他们可以导航的页面的授权,那么我建议也包括角色。然后在 sitemapprovider 中使用 securityTrimmingEnabled="ture"。这样您就不需要为每个用户单独的站点地图。

这里是how it works的基础:

您可能想分享一些代码让我们知道为什么您尝试的方法不起作用。

已编辑:1

您不需要内置角色提供程序来实现此功能,但您确实需要将角色添加到 UserPrincipal。 怎么做是shown here 但是您需要编写代码,将角色作为字符串返回每个真值,即如果数据库中的用户的 admin 为真,则返回“admin”。然后将这些角色添加到用户 Principal 中,如链接所示,它应该与第一个链接结合使用。

编辑:2 您不需要为 SiteMap 工作的复杂代码。您只需将其放在您的页面上,它就会根据您的 .sitemap 文件工作。您还为站点地图节点设置了 title="",将其设置为某个值。

【讨论】:

@kb88:是的,您将所有页面添加为 web.sitemap 中的站点地图节点。然后根据您在 web.config 中的授权设置,sitemapprovider+Asp.net 将决定显示哪个页面,哪个不显示。然后,您无需担心其他任何事情。您是否有很多限制,或者只有少数像您说的只有一个用户可以查看所有页面?休息呢? 有五个不同的用户,两个可以查看相同的内容,另一个不能与这些用户执行/查看相同的内容。每个母版页都需要 AuthenticateRequest 事件处理程序在哪里?谢谢 @kb88:好的,那么选择角色是个好方法。您在 Global.asax 中添加 AuthenticateRequest。 @kb88:我不确定这是否是一条简单的路线。但是,如果您走用户主体路线,那么您将获得根据用户角色允许用户的功能。如果您仍想进行一些自定义,您也可以使用 User.IsInRole 方法进行检查。也就是说,这可以补充您现有的课程,或者您甚至可以摆脱现有的在母版页中进行检查的课程。

以上是关于导航站点MathPath的主要内容,如果未能解决你的问题,请参考以下文章

无法导航到 CodeIgniter 站点

Spring MVC 4 站点导航

Confluence 6 后台中为站点添加应用导航

防止站点导航重叠标题

引导导航破坏站点宽度

SharePoint Online 站点导航更新不生效