Asp.net mvc DynamicNodeProvider生成不正确的url
我是MVCSitemprovider的新手。不幸的是,我自己找不到答案。 我使用MVC4和MvcSiteMapProvider 我的问题是: 1) 链接Buy(和Buy->Search)将我链接到localhost,但必须是localhost/Buy/Search 2) 链接Toy/Toy Details/1不属于“购买”菜单(如果我到达此链接菜单Buy->Search消失),请提前感谢 My Mvc.sitemap:Asp.net mvc DynamicNodeProvider生成不正确的url,asp.net-mvc,asp.net-mvc-4,mvcsitemapprovider,Asp.net Mvc,Asp.net Mvc 4,Mvcsitemapprovider,我是MVCSitemprovider的新手。不幸的是,我自己找不到答案。 我使用MVC4和MvcSiteMapProvider 我的问题是: 1) 链接Buy(和Buy->Search)将我链接到localhost,但必须是localhost/Buy/Search 2) 链接Toy/Toy Details/1不属于“购买”菜单(如果我到达此链接菜单Buy->Search消失),请提前感谢 My Mvc.sitemap: <mvcSiteMapNode title="Home" cont
<mvcSiteMapNode title="Home"
controller="Toy"
action="Index"
key="Home">
<mvcSiteMapNode title="Buy"
controller="Toy"
action="Search"
key="ToyBuy">
<mvcSiteMapNode title="Search"
controller="Toy"
action="Search"
key="ToySearch">
<mvcSiteMapNode title="Toy Search Result"
controller="Toy" action="Search-Result"
key="ToySearchResult">
<mvcSiteMapNode title="Toy Details"
controller="Toy"
action="Toy-Details"
key="ToyDetail" dynamicNodeProvider="MyToys.Web.DynamicNodeProviders.ToySearchDynamicNodeProvider,MyToys.Web"/>
</mvcSiteMapNode>
</mvcSiteMapNode>
<mvcSiteMapNode title="Publish" controller="Toy" action="Publish" description=""/>
<mvcSiteMapNode title="Published" controller="Toy" action="Published" key="ToyPublished" description="">
<mvcSiteMapNode title="Edit" controller="Toy" action="Edit"
preservedRouteParameters="id" key="ToyPublishedEdit" visibility="false" description=""/>
</mvcSiteMapNode>
以及Toysearch DynamicNodeProvider:
public override IEnumerable<DynamicNode> GetDynamicNodeCollection(ISiteMapNode node)
{
var rep = new ToyRepository();
foreach (var Toy in rep.Get())
{
DynamicNode dynamicNode = new DynamicNode();
dynamicNode.ParentKey = "ToySearchResult";
dynamicNode.RouteValues.Add("id", Toy.ID);
yield return dynamicNode;
}
}
public override IEnumerable GetDynamicNodeCollection(ISiteMapNode节点)
{
var rep=new ToyRepository();
foreach(rep.Get()中的变量Toy)
{
DynamicNode DynamicNode=新的DynamicNode();
dynamicNode.ParentKey=“ToySearchResult”;
dynamicode.RouteValues.Add(“id”,Toy.id);
收益动态模型;
}
}
顺便说一下,我还重写了MenuHelperModel.cshtml:
<div class="hmenu">
<ul class="tabs">
@foreach (var node in Model.Nodes)
{
<li>@Html.DisplayFor(m => node)</li>
}
</ul>
</div>
@foreach (var node in Model.Nodes)
{
if (node.IsInCurrentPath)
{
if (node.Children.Any())
{
<div class="vmenu">
<ul class="tabs">
@foreach (var child in node.Children)
{
<li><a href="@child.Url">@child.Description</a></li>
}
</ul>
</div>
}
}
}
@foreach(Model.Nodes中的var节点)
{
- @DisplayFor(m=>node)
}
@foreach(Model.Nodes中的var节点)
{
if(node.IsInCurrentPath)
{
if(node.Children.Any())
{
@foreach(node.Children中的变量child)
{
}
}
}
}
Buy(和Buy->Search)
MvcSiteMapProvider使用与MVC框架的其余部分相同的MVC UrlHelper类来生成URL。URL的创建方式取决于路由配置。已经有一些资源可以帮助您配置MVC路由。这里有一些
我不能说得更具体了,因为您没有提到您试图生成的URL方案
链接Toy/Toy Details/1不属于“购买”菜单
它没有列在“Buy”节点下的原因是,动态节点提供程序没有指定任何父键为“ToyBuy”的节点
通常,您需要在其主类别下指定动态节点。转到搜索功能时,可以使用单个节点。您可以使用PreservedLoteParameters属性指定每个自定义路由参数(例如,搜索词),这将把当前请求中的值复制到节点,并强制它每次都与节点匹配
主页>搜索
然后,当从搜索页面导航到特定的搜索项目时,它会将您带到该类别下列出的项目页面(本例中为ToyBuy)
主页>购买>项目
有关使用参数的可下载演示,请参阅
还要注意的是,玩具的详细信息不会出现在网站地图上。声明dynamicodeProvider的节点只是一个模板节点,默认情况下,所有dynamicodes都具有其属性。非常感谢您的回答。这真的很有帮助。你能看一下问题的发送部分吗?我添加了它作为显示代码的答案。