Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc DynamicNodeProvider生成不正确的url_Asp.net Mvc_Asp.net Mvc 4_Mvcsitemapprovider - Fatal编程技术网

Asp.net mvc DynamicNodeProvider生成不正确的url

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

我是MVCSitemprovider的新手。不幸的是,我自己找不到答案。 我使用MVC4和MvcSiteMapProvider 我的问题是:

1) 链接Buy(和Buy->Search)将我链接到localhost,但必须是localhost/Buy/Search

2) 链接Toy/Toy Details/1不属于“购买”菜单(如果我到达此链接菜单Buy->Search消失),请提前感谢

My Mvc.sitemap:

<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都具有其属性。

非常感谢您的回答。这真的很有帮助。你能看一下问题的发送部分吗?我添加了它作为显示代码的答案。