/ / Как да получа MVCSiteMap, за да включа всичките си персонализирани генерирани страници в sitemap.xml - asp.net, asp.net-mvc, asp.net-mvc-5, mvcsitemapprovider

Как да получа MVCSiteMap, за да включа всичките си персонализирани генерирани страници в sitemap.xml - asp.net, asp.net-mvc, asp.net-mvc-5, mvcsitemapprovider

Проверих документацията, но не можах да намеря това, което търся. Възможно е това, което търся, да не е възможно, това е нова територия за мен.

Използвам MVCSiteMapProvider за първи път. Трябва да се уверя, че търсачките могат да обхождат списък с динамично създадени страници в моя asp.net mvc сайт.

Изгледът се създава въз основа на два параметъра: заглавие и идентификатор. Урлът се изплюва се дефинира в персонализиран маршрут по следния начин:

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 и се забърках с файла .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), Това прави това:

  • У дома
  • относно
  • HiringSolutions
  • Правила за поверителност
  • условия
  • Търсене
    • работа

Как мога да постигна това динамично ?:

  • У дома
  • относно
  • HiringSolutions
  • Правила за поверителност
  • условия
  • Търсене
    • работа
      • / JobSearch / главен талант-офицер-1710
      • / JobSearch / друг-он-1234
      • / JobSearch / друг-он-1235
      • / JobSearch / друг-он-1236
      • / JobSearch / друг-он-1237

И след като имам това (ако е възможно), създава ли този файл sitemap.xml в корена на моя сайт, или трябва да направя нещо, за да го достигна от ботове?

Отговори:

2 за отговор № 1

Има ли 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 за отговор № 2

Звучи, че трябва да създадете страница с ръководства, в която да се изброят всички задания във вашата база данни, тъй като доставчикът на сайта (или Google) може да знае какво да постави като аргумент на страницата за търсене или търсене.

Или това или създайте скрипт, който генерира sitemap.xml за теб. И в двата случая това е работа Вие трябва да направите, защото само вие знаете структурата на вашите данни.