Навигация по сайтуMathPath

В моем приложении есть несколько разных пользователей, в настоящее время для них настроены разные мастер-страницы. Идея состоит в том, чтобы в системе был какой-то тип хлебных крошек, то есть главная> подробности> ...

Каков наилучший подход для этого? Я думаю, мне нужно будет определить отдельные пути, которые может иметь каждый пользователь (все страницы, которые они могут просматривать) в Web.sitemap (будет иметь несколько SiteMapPath), а затем добавить элемент управления картой сайта на главную страницу и связать их с соответствующим 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>

Спасибо


person kt87    schedule 25.03.2011    source источник


Ответы (1)


Если вы используете FormsAuthentication для управления авторизацией пользователей на страницах, по которым они могут перемещаться, я бы предложил также включить роли. Затем используйте securityTrimmingEnabled="ture" в sitemapprovider. Таким образом, вам не понадобятся отдельные карты сайта для каждого пользователя.

Вот основные сведения о том, как это работает:

И вы можете поделиться кодом, чтобы мы знали, почему то, что вы пробовали, не работает.

Отредактировано:1

Для этого вам не нужен встроенный поставщик ролей, но вам нужно добавить роли в UserPrincipal. Как это сделать показано здесь. Но вам потребуется написать код, который возвращает роли. как строка для каждого истинного значения, т.е. «admin», если admin является истинным для пользователя в базе данных. Затем добавьте эти роли к основному пользователю, как показано в ссылке, и это должно работать в сочетании с первой ссылкой.

Изменить:2 Вам не нужен этот сложный код для работы SiteMap. Вы просто помещаете его на свою страницу, и он будет работать на основе вашего файла .sitemap. Также у вас есть title="" для узла карты сайта, установите для него какое-то значение.

person gbs    schedule 25.03.2011
comment
@ kb88: Да, вы добавляете все страницы в качестве узлов карты сайта в файле web.sitemap. Затем, в зависимости от ваших настроек авторизации в web.config, sitemapprovider+Asp.net решит, какую страницу показывать, а какую нет. Тогда вам не нужно беспокоиться ни о чем другом. У вас много ограничений или мало, как вы говорите, только один пользователь может просматривать все страницы, а остальные? - person gbs; 26.03.2011
comment
есть пять разных пользователей, двое могут просматривать одни и те же вещи, а другой не может делать/просматривать те же вещи, что и эти пользователи. Где я могу использовать обработчик событий AuthenticateRequest на каждой мастер-странице? Спасибо - person kt87; 26.03.2011
comment
@ kb88: Хорошо, тогда использование ролей - это хороший способ. Вы добавляете AuthenticateRequest в Global.asax. - person gbs; 26.03.2011
comment
@ kb88: Я не уверен, что это будет легкий путь. Но скажем, если вы пойдете по маршруту User Principal, вы получите возможность разрешать пользователям в зависимости от их роли. Также вы можете использовать метод User.IsInRole для проверки, если вы все еще хотите выполнить некоторые настройки. то есть это может дополнить ваш существующий класс, или вы даже сможете избавиться от своего существующего класса, который выполняет эту проверку на главной странице. - person gbs; 26.03.2011