Я использую 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>
}
}
привет, это автоматически создает сайт, или мы должны сделать это вручную? –
Не уверен, что вы подразумеваете под «автоматически создает сайт». Меню создано отлично, за исключением того, что он, кажется, игнорирует атрибут url. – SFAgitator
означает, что когда я устанавливаю его из nuget, он генерирует карту сайта в соответствии со всеми представлениями и контроллером, или мы должны определить n написать их. –