我已经梳理了文档,但我找不到我要找的东西。我可能正在寻找的是不可能的,这对我来说是一个新的领域。
我第一次使用MVCSiteMapProvider。我需要确保搜索引擎可以在我的asp.net mvc站点中抓取动态创建的页面列表。
视图基于两个参数创建:title和id。吐出的网址在自定义路由中定义,如下所示:
routes.MapRoute(
"JobResults", // Route name
"JobSearch/{title}-{id}", // URL with parameters
new { controller = "JobSearch", action = "Job" }, // Parameter defaults
new[] { "MyApp.Web.Controllers" }
);
所以当我点击一个链接时,它会带我去:localhost:43736 / JobSearch / chief-talent-officer-1710
我设置了站点地图插件并与.sitemap文件混淆,所以它看起来像这样:
<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0"
xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd">
<mvcSiteMapNode title="Home" controller="Home" action="Index" changeFrequency="Always" updatePriority="Normal">
<mvcSiteMapNode title="About" controller="Home" action="About"/>
<mvcSiteMapNode title="HiringSolutions" controller="Home" action="HiringSolutions"/>
<mvcSiteMapNode title="Privacy Policy" controller="Home" action="Privacy"/>
<mvcSiteMapNode title="Terms" controller="Home" action="Terms" />
<mvcSiteMapNode title="Search" controller="JobSearch" action="Index" changeFrequency="Always" updatePriority="Normal">
<mvcSiteMapNode title="Job" controller="JobSearch" action="Job" changeFrequency="Always" updatePriority="High" route="JobResults"/>
</mvcSiteMapNode>
</mvcSiteMapNode>
</mvcSiteMap>
要查看它的内容,我在索引页面上调用了它:@Html.MvcSiteMap().Menu(false, true, true)
。它提出了这个:
我怎样才能让它动态地执行此操作?:
一旦我有了(如果可能的话),这会在我网站的根目录中创建一个sitemap.xml文件,还是我需要做些什么来让机器人可以访问?
答案 0 :(得分:2)
DynamicNodeProvider听起来像你在找什么?示例代码显示了如何从数据库查询构建一组节点。
public class StoreDetailsDynamicNodeProvider
: DynamicNodeProviderBase
{
public override IEnumerable<DynamicNode> GetDynamicNodeCollection(ISiteMapNode node)
{
using (var storeDB = new MusicStoreEntities())
{
// Create a node for each album
foreach (var album in storeDB.Albums.Include("Genre"))
{
DynamicNode dynamicNode = new DynamicNode();
dynamicNode.Title = album.Title;
dynamicNode.ParentKey = "Genre_" + album.Genre.Name;
dynamicNode.RouteValues.Add("id", album.AlbumId);
yield return dynamicNode;
}
}
}
}
答案 1 :(得分:1)
听起来您需要创建一个手册页,其中列出了数据库中的所有作业,因为站点地图提供者(或Google)不太可能知道将什么作为参数添加到作业或搜索页面。
或者创建一个为您生成sitemap.xml
的脚本。在任何一种情况下,这都是你必须要做的工作,因为只有你知道数据的结构。