Я ищу способ вернуть представление, основанное на Id, но добавляя дружественную часть url при возврате.ASP.NET Mvc 5 return View with seo friendly url
Я знаю, что могу передать идентификатор и имя, когда у меня есть эти данные, например. используя:
Url.Action("Index", "Cat", new { id = model.ID, seoname = model.SEO });
[AllowAnonymous]
[Route("Cat/{id?}/{seoname?}")]
public ActionResult Index(int? id = null, string seoname = null) {
// do something with id and create viewmodel
// in case I get redirect from the SelCat actionresult:
if (id.HasValue and string.IsNullOrEmpty(seoname)) {
// look in the database for title by the given id
string seofriendlyTitle = ...;
RouteData.Values.AddOrSet("seoname", seofriendlyTitle);
}
return View(viewmodel);
}
этот код не является проблемой. Проблема возникает, когда я отправляю форму (dropdownlist), где у меня есть только идентификатор.
[HttpPost]
[AllowAnonymous]
[Route("Cat/SelCat/{form?}")]
public ActionResult SelCat(FormCollection form)
{
string selectedValues = form["SelectedCat"];
// ...
int id = selectedCatID;
return RedirectToAction("Index", new { id = id });
}
В случае, если я переориентировать от действия SelCat к действию Index только с идентификатором Я хочу, чтобы искать seofriendly имени и при возвращении зрения. Я надеялся, что URL-адрес имеет дружественный URL-адрес.
// in case I get redirect from the SelCat actionresult:
if (id.HasValue and string.IsNullOrEmpty(seoname)) {
// look in the database for title by the given id
string seofriendlyTitle = ...;
RouteData.Values.AddOrSet("seoname", seofriendlyTitle); // <-- does not alter url
}
Как я могу сделать мой URL сео дружественный при возвращении представления в мой контроллер действий, когда только идентификатор дается? Настройка параметров RouteData.Values. похоже, не добавляет часть к URL.
Из-за логики мне нужно сделать запрос базы данных в отношении действия индекса, но теперь мне нужен второй запрос базы данных в действии SelCat. Черт возьми! Я думал, что это можно сделать в одном действии. – juFo
Учитывая, что вы запрашиваете идентификатор, любая достойная база данных должна делать все возможное, чтобы запрашивать первичный ключ. Кроме того, вы можете добавить некоторый уровень кеширования, если вас беспокоит производительность. –