Asp.net mvc mvc sitemapprovider哈希片段
我正在使用sitemapprovider在MVC4应用程序中实现面包屑。 我需要添加一个哈希片段valAsp.net mvc mvc sitemapprovider哈希片段,asp.net-mvc,asp.net-mvc-4,hash,mvcsitemapprovider,Asp.net Mvc,Asp.net Mvc 4,Hash,Mvcsitemapprovider,我正在使用sitemapprovider在MVC4应用程序中实现面包屑。 我需要添加一个哈希片段val <mvcSiteMapNode title="Funds" controller="VcTransfer" action="Index/#" preservedRouteParameters=""> <mvcSiteMapNode title="Funds transfer" controller="VcTransfer" action="Index" pres
<mvcSiteMapNode title="Funds" controller="VcTransfer" action="Index/#" preservedRouteParameters="">
<mvcSiteMapNode title="Funds transfer" controller="VcTransfer" action="Index" preservedRouteParameters="id" />
</mvcSiteMapNode>
我希望我已经说清楚了,提前谢谢
编辑:最终结果应如下所示:
(http://localhost:8080/VcTransfer/Index#Network tab浏览器会处理一个片段,但不会回发到服务器,因此在使URL唯一时,它实际上并不“算数”。因此,如果您有多个只因片段不同的节点,MvcSiteMapProvider将无法区分它们,并且无论您选择哪个节点,它都将始终匹配注册的第一个节点 这基本上意味着您的面包屑不会改变,并且当选择一个备用片段时,所选菜单项也不会改变。这不是一个bug,只是不可能做到 但是,如果出于导航以外的其他原因(例如javascript支持)需要添加片段,可以通过向节点添加自定义属性,然后修改节点模板以在视图中输出片段来完成 首先,向节点添加自定义属性
<mvcSiteMapNode title="Funds" controller="VcTransfer" action="Index" fragment="Network-tab">
@model MvcSiteMapProvider.Web.Html.Models.SiteMapNodeModel
@using System.Web.Mvc.Html
@using MvcSiteMapProvider.Web.Html.Models
@{
var fragment = (Model.Attributes["fragment"] != null) ? "#" + Model.Attributes["fragment"] : "";
var url = Model.Url + fragment;
}
@if (Model.IsCurrentNode && Model.SourceMetadata["HtmlHelper"].ToString() != "MvcSiteMapProvider.Web.Html.MenuHelper") {
<text>@Model.Title</text>
} else if (Model.IsClickable) {
if (string.IsNullOrEmpty(Model.Description))
{
<a href="@url">@Model.Title</a>
}
else
{
<a href="@url" title="@Model.Description">@Model.Title</a>
}
} else {
<text>@Model.Title</text>
}
谢谢!
与此同时,我找到了一个解决办法,但这是针对我的具体情况:
switch (window.location.hash.toString()) {
case '#Network-tab':
//alert('Network-navTab');
$("#Network-navTab").addClass("active");
$("#Network-tab").addClass("active in");
break;
case '#Network_Company-tab':
//alert('Network_Company-navTab');
$("#Network_Company-navTab").addClass("active");
$("#Network_Company-tab").addClass("active in");
break;
case '#Company_Skin-tab':
//alert('Company_Skin-navTab');
$("#Company_Skin-navTab").addClass("active");
$("#Company_Skin-tab").addClass("active in");
break;
case '#Skin_Player-tab':
//alert('Skin_Player-navTab');
$("#Skin_Player-navTab").addClass("active");
$("#Skin_Player-tab").addClass("active in");
break;
default:
$("#Network-navTab").addClass("active");
$("#Network-tab").addClass("active in");
break;
}
我已经将对应于菜单链接的散列放在开关的默认情况下,因此在这种情况下,我不必在第一次加载视图时检查散列…在其他情况下,我在回发期间在路由中设置散列。。。
但再次感谢!当我无法这样做时,我会将您的答案添加到书签中:)在使用AttributesToIgnore键时,您可以添加多个值。用逗号隔开就行了。
this.For<IReservedAttributeNameProvider>().Use<ReservedAttributeNameProvider>()
.Ctor<IEnumerable<string>>("attributesToIgnore").Is(new string[] { "fragment" });
@model MvcSiteMapProvider.Web.Html.Models.SiteMapNodeModel
@using System.Web.Mvc.Html
@using MvcSiteMapProvider.Web.Html.Models
@{
var fragment = (Model.Attributes["fragment"] != null) ? "#" + Model.Attributes["fragment"] : "";
var url = Model.Url + fragment;
}
@if (Model.IsCurrentNode && Model.SourceMetadata["HtmlHelper"].ToString() != "MvcSiteMapProvider.Web.Html.MenuHelper") {
<text>@Model.Title</text>
} else if (Model.IsClickable) {
if (string.IsNullOrEmpty(Model.Description))
{
<a href="@url">@Model.Title</a>
}
else
{
<a href="@url" title="@Model.Description">@Model.Title</a>
}
} else {
<text>@Model.Title</text>
}
switch (window.location.hash.toString()) {
case '#Network-tab':
//alert('Network-navTab');
$("#Network-navTab").addClass("active");
$("#Network-tab").addClass("active in");
break;
case '#Network_Company-tab':
//alert('Network_Company-navTab');
$("#Network_Company-navTab").addClass("active");
$("#Network_Company-tab").addClass("active in");
break;
case '#Company_Skin-tab':
//alert('Company_Skin-navTab');
$("#Company_Skin-navTab").addClass("active");
$("#Company_Skin-tab").addClass("active in");
break;
case '#Skin_Player-tab':
//alert('Skin_Player-navTab');
$("#Skin_Player-navTab").addClass("active");
$("#Skin_Player-tab").addClass("active in");
break;
default:
$("#Network-navTab").addClass("active");
$("#Network-tab").addClass("active in");
break;
}