标签: asp.net-mvc-sitemap

如何使用mvcsitemapprovider将自定义xml标记添加到sitemap.xml?

根据Google在视频站点地图中定义的内容,应该将一些xml标记添加到视频的站点地图中,它应该是这样的:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
    xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
<url>
 <loc>http://www.example.com/videos/some_video_landing_page.html</loc>
 <video:video>
   <video:thumbnail_loc>http://www.example.com/thumbs/123.jpg</video:thumbnail_loc>
   <video:title>Grilling steaks for summer</video:title>
   <video:description>Alkis shows you how to get perfectly done steaks every
     time</video:description>
   <video:content_loc>http://www.example.com/video123.mp4</video:content_loc>
   <video:player_loc autoplay="ap=1">
     http://www.example.com/videoplayer.mp4?video=123</video:player_loc>
   <video:duration>600</video:duration>
   <video:expiration_date>2009-11-05T19:20:30+08:00</video:expiration_date>
   <video:rating>4.2</video:rating>
   <video:view_count>12345</video:view_count>
   <video:publication_date>2007-11-05T19:20:30+08:00</video:publication_date>
   <video:family_friendly>yes</video:family_friendly>
   <video:restriction relationship="allow">IE GB US CA</video:restriction>
   <video:gallery_loc title="Cooking Videos">http://cooking.example.com</video:gallery_loc>
   <video:price currency="EUR">1.99</video:price>
   <video:requires_subscription>yes</video:requires_subscription>
   <video:uploader info="http://www.example.com/users/grillymcgrillerson">GrillyMcGrillerson
     </video:uploader>
   <video:live>no</video:live>
 </video:video>
Run Code Online (Sandbox Code Playgroud)

我想知道如何动态地将这些自定义标签添加到我的sitemap.xml中?我正在使用mvcsitemapprovider

sitemapprovider google-sitemap mvcsitemapprovider asp.net-mvc-sitemap

7
推荐指数
1
解决办法
316
查看次数

MVCSitemapProvider指示当前节点和父节点

我想用css类标记当前节点和它的父节点.我在四处搜寻,发现这些链接:

http://mvcsitemap.codeplex.com/discussions/257786 http://mvcsitemap.codeplex.com/discussions/245000

所以我修改了SiteMapNodeModelList.cshtml,现在突出显示当前节点.但不知道我应该如何突出显示父节点.

<ul>
    @foreach (var node in Model) { 
        <li class="@(node.IsCurrentNode ? "current" : "")" >@Html.DisplayFor(m => node) 
            @if (node.Children.Any()) {
                @Html.DisplayFor(m => node.Children)
            }
        </li>
    }
</ul>
Run Code Online (Sandbox Code Playgroud)

为了标记父节点,我构建了一个扩展方法来检查所有直接子元素(我只有2个级别):

    public static bool IsCurrentNodeOrChild(this SiteMapNodeModel node)
    {
        if (node.IsCurrentNode) return true;

        return node.Children.Any(n => n.IsCurrentNode);
    }
Run Code Online (Sandbox Code Playgroud)

并改变了MenuHelperModel.cshtml,如下所示:

<ul id="menu">
    @foreach (var node in Model.Nodes) { 
        <li class="@(node.IsCurrentNodeOrChild() ? "current" : "d")" >@Html.DisplayFor(m => node) 
            @if (node.Children.Any()) {
                @Html.DisplayFor(m => node.Children)
            }
        </li>
    }
</ul>
Run Code Online (Sandbox Code Playgroud)

这现在完美无缺.但是真的没有更简单的方法吗?难道不能成为世界上第一个需要这个的人吗?

c# asp.net-mvc mvcsitemapprovider asp.net-mvc-sitemap

6
推荐指数
2
解决办法
3240
查看次数

MvcSiteMapProvider没有准备好页面渲染,缓存问题?

tl; dr: MvcSiteMapProvider的菜单有时无法在应用程序重新联机后呈现自身,即使代码运行并且菜单在页面刷新后呈现.

我在ASP.NET MVC 3项目中使用MvcSiteMapProvider,偶尔将应用程序从离线切换到在线(通过将App_Offline.htm文件插入服务器的根目录并将其删除),在刷新页面之前,菜单不会呈现任何内容.

我使用自定义DynamicNodeProvider从数据库中查询菜单项,然后呈现菜单.在调试时,我可以看到此代码确实在页面加载之前运行,但页面上没有呈现菜单.我将缓存设置为几个小时,并使用自定义缓存键以允许在某些操作后失效.

不幸的是,我不能让这个错误一致地重现.然而,如果我在DynamicNodeProvider的顶部添加一个睡眠,我可以让它更频繁地重现- 它会在60-70%的睡眠时间内失败大约60-70%.到目前为止,我最好的猜测是它与缓存机制有关,因为将缓存持续时间设置为0 似乎使得它没有问题,并且菜单总是弹出.但是,很难确定,因为这个问题很难确定.由于性能下降,将其保留为0将不是可接受的解决方案.

可能是这个问题的根本原因是什么?有没有人见过这种行为或有一个解决方法?

asp.net-mvc caching mvcsitemapprovider asp.net-mvc-sitemap

5
推荐指数
1
解决办法
513
查看次数

如何使用mvcSiteMapProvider实现安全性?

我需要使用我的mvcSiteMapProvider V4软件实现角色安全性.我正在使用它与MVC3.

示例mvcSiteMap代码:

      <mvcSiteMapNode roles="Admin" title="Your Subscription (All Users)" controller="SOU" action="ListSubscribers">
Run Code Online (Sandbox Code Playgroud)

此角色属性值无效:

      <mvcSiteMapNode roles="NoAdmin" title="Your Subscription (All Users)" controller="SOU" action="ListSubscribers">
Run Code Online (Sandbox Code Playgroud)

这是一样的.如果管理员登录,我希望上述内容不起作用?如果只有用户登录,我希望第一个例子能够工作.

......但没有效果.

非常感谢

asp.net-mvc asp.net-mvc-3 mvcsitemapprovider asp.net-mvc-sitemap

4
推荐指数
1
解决办法
8624
查看次数