2015-06-10 4 views
2

Я использую MvcSiteMapProvider 4.6.18. Многие пункты моего меню ссылаются на внешние сайты; однако атрибут «url» mvcSiteMapNode не переносится в меню. То есть я вижу URL-адрес в источнике, но ссылка ссылается на родительский контроллер mvcSiteMapNode и действие, а не на указанный мной URL-адрес.MvcSiteMapProvider MVC5 Внешний URL-адрес перенаправления на домашний контроллер/метод индекса

Вот соответствующий код:

<?xml version="1.0" encoding="utf-8" ?> 
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0" 
    xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd"> 

<mvcSiteMapNode title="Home" controller="Home" action="Index"> 
    <mvcSiteMapNode title="About" url="http://www.amazon.com"/> 
</mvcSiteMapNode> 

</mvcSiteMap> 

И вот что я вижу при просмотре источника:

<li> 
    <a href="/"><span class="menu-text">About</span></a> 
</li> 

Это не имеет значения, что я использую для URL, он всегда указывает на корень (т.е. Home).

Кажется, что-то простое, что мне не хватает. Но для жизни я не могу понять. Для полноты, вот мой RouteConfig:

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

Любая помощь будет оценена.

Update

Благодаря @ NightOwl888, этот вопрос был одним из шаблонов отображения. MvcSiteMapProvider был частью шаблона темы начальной загрузки, который я загрузил из wrapbootstrap, и не думал, чтобы посмотреть на шаблоны отображения в качестве возможной проблемы.

Это нарушающий шаблон, измененный с оригинальной загрузки NuGet для работы с настраиваемым меню боковой панели.

@model MvcSiteMapProvider.Web.Html.Models.MenuHelperModel 
@using System.Web.Mvc.Html 
@using MvcSiteMapProvider.Web.Html.Models 

<ul class="nav sidebar-menu"> 
    @ShowMenu(Model.Nodes) 
</ul> 

@helper ShowMenu(IEnumerable<SiteMapNodeModel> menuItems) 
{ 
    foreach (var node in menuItems) 
    { 
     var nodeclass = ""; 
     if (node.IsCurrentNode) 
     { 
     nodeclass = "active"; 
     } 
     if (node.Children.Any(n => n.IsCurrentNode)) 
     { 
     nodeclass = "active open"; 
     } 
     else if (node.Children.Any()) 
     { 
     foreach (var c in node.Children) 
     { 
      if (c.Children.Any()) 
      { 
       if (c.Children.Any(n => n.IsCurrentNode)) 
       { 
        nodeclass = "active open"; 
       } 
      } 
     } 
     } 
     <li class="@(!string.IsNullOrEmpty(nodeclass) ? Html.Raw(nodeclass) : null)"> 
     @if (node.Children.Any()) 
     { 
      @Html.Bootstrap().SidebarMenuItem(node.Title, node.Area, node.Action, node.Controller).Icon(node.ImageUrl).IsDropDown(); 
     } 
     else 
     { 
      @Html.Bootstrap().SidebarMenuItem(node.Title, node.Area, node.Action, node.Controller).Icon(node.ImageUrl); 
     } 
     @if (node.Children.Any()) 
     { 
      <ul class="submenu"> 
       @ShowMenu(node.Children) 
      </ul> 
     } 
     </li> 
    } 
} 
+0

привет, это автоматически создает сайт, или мы должны сделать это вручную? –

+0

Не уверен, что вы подразумеваете под «автоматически создает сайт». Меню создано отлично, за исключением того, что он, кажется, игнорирует атрибут url. – SFAgitator

+0

означает, что когда я устанавливаю его из nuget, он генерирует карту сайта в соответствии со всеми представлениями и контроллером, или мы должны определить n написать их. –

ответ

0

MvcSiteMapProvider управляется HTML helpers. Поскольку я не могу воспроизвести проблему с v4.6.18 и MVC5, я подозреваю, что вы не добавили ее в свое мнение.

Типичный случай заключается в том, чтобы добавить HTML-помощник меню на страницу /Views/Shared/_Layout.cshtml, как показано ниже.

<div class="navbar-collapse collapse"> 
    @*<ul class="nav navbar-nav"> 
     <li>@Html.ActionLink("Home", "Index", "Home")</li> 
     <li>@Html.ActionLink("About", "About", "Home")</li> 
     <li>@Html.ActionLink("Contact", "Contact", "Home")</li> 
    </ul>*@ 
    @* Use the MvcSiteMapProvider Menu HTML helper *@ 
    @Html.MvcSiteMap().Menu() 
    @Html.Partial("_LoginPartial") 
</div> 

СОВЕТ: Если вы обновите MvcSiteMapProvider.Web пакет до версии 4.6.18, классы Bootstrap CSS будет выводиться на меню HTML-хелперов, так что это будет сочетаться с MVC по умолчанию 5 тема в. Выполните команду PM> Update-Package MvcSiteMapProvider.Web -Safe из консоли диспетчера пакетов для обновления.

+0

У меня есть помощники HTML в моем файле _layout.cshtml, и меню отображается просто отлично. Моя проблема связана с атрибутом url. Независимо от того, какой url я использую, url не применяется к меню. Таким образом, в моем примере выше, я ожидал бы, что пункт меню About переместится на amazon.com; однако, это не то, что происходит.Где-то вдоль линии указанный мной URL-адрес удаляется и приводит к выходу, который я опубликовал выше, и ссылаюсь на «И вот что я вижу при просмотре источника:» часть моего сообщения. В принципе, URL-адрес заменяется на «/» – SFAgitator

+1

[Вот демонстрация] (https://github.com/NightOwl888/MvcSiteMapProvider_MVC5_396), показывая, что он работает. Проверьте свою конфигурацию на этот проект, особенно package.config для MvcSiteMapProvider и шаблоны в '/ Views/Shared/DisplayTemplates /'. – NightOwl888

+0

Я сузил его до файла MenuHelperModel.cshtml. Мой фактически отличается от стандартного. Я обновляю свое оригинальное сообщение своими выводами. Спасибо за помощь. – SFAgitator