MVC SitemapProiver, добавление новой ссылки на карту сайта при возникновении действия
Мне нужно вставить несколько внешних ссылок на мою MVCSitemap. По сути, есть родительский узел под названием "LINKS", который я буду заполнять URL-адресами из другого приложения, через представление администратора. Мне было интересно, есть ли встроенный метод, который с помощью параметра может найти родительский узел и вставить в него дочерний узел, как будто я редактировал документ вручную.
1 ответ
Рекомендованным способом достижения этого является использование пользовательского IDynamicNodeProvider или ISiteMapNodeProvider для предоставления узлов и использование SiteMapCacheReleaseAttribute в методах действия, которые изменяют данные SiteMap для аннулирования кэша, чтобы SiteMap загружал новые узлы при следующем обращении к нему.
[HttpPost]
[SiteMapCacheRelease]
public ActionResult Edit(int id, Product product)
{
try
{
using (var db = new CRUDExample())
{
var model = (from p in db.Product
where p.Id == id
select p).FirstOrDefault();
if (model != null)
{
model.Name = product.Name;
db.SaveChanges();
}
}
return RedirectToAction("Index");
}
catch
{
return View();
}
}
SiteMapCacheReleaseAttribute должен быть размещен на всех методах добавления, редактирования и удаления, которые бы вы хотели, чтобы изменения произошли немедленно, и, как правило, должны применяться только к стороне [HttpPost], поскольку [HttpGet] обычно не изменяет никаких данных.