根据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
我想用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)
这现在完美无缺.但是真的没有更简单的方法吗?难道不能成为世界上第一个需要这个的人吗?
tl; dr: MvcSiteMapProvider的菜单有时无法在应用程序重新联机后呈现自身,即使代码运行并且菜单在页面刷新后呈现.
我在ASP.NET MVC 3项目中使用MvcSiteMapProvider,偶尔将应用程序从离线切换到在线(通过将App_Offline.htm
文件插入服务器的根目录并将其删除),在刷新页面之前,菜单不会呈现任何内容.
我使用自定义DynamicNodeProvider从数据库中查询菜单项,然后呈现菜单.在调试时,我可以看到此代码确实在页面加载之前运行,但页面上没有呈现菜单.我将缓存设置为几个小时,并使用自定义缓存键以允许在某些操作后失效.
不幸的是,我不能让这个错误一致地重现.然而,如果我在DynamicNodeProvider的顶部添加一个睡眠,我可以让它更频繁地重现- 它会在60-70%的睡眠时间内失败大约60-70%.到目前为止,我最好的猜测是它与缓存机制有关,因为将缓存持续时间设置为0 似乎使得它没有问题,并且菜单总是弹出.但是,很难确定,因为这个问题很难确定.由于性能下降,将其保留为0将不是可接受的解决方案.
可能是这个问题的根本原因是什么?有没有人见过这种行为或有一个解决方法?
我需要使用我的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