Что я делаю на своих сайтах, что я проверить URL против либо названия страницы или страниц заглушек в тех случаях, когда заголовки страниц могут иметь одноименное имя, например, если у вас есть сайт, на котором размещается «Изображение недели», вы можете использовать заглушку вместо названия, так как у вас будут мультипликаторы с одинаковым именем.
URL-адреса выглядеть следующим образом: http://mySite.com/Page/Verse-of-the-Week
Global.asax содержит следующее:
routes.MapRoute("Pages", "{controller}/{pageID}", new { controller = "Page", action = "Index", pageID = "Home" });
PageController это:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Index(string pageID)
{
if (pageID == null)
{
pageID = pageRepository.HomeOrLowest();
}
var p = pageRepository.ByStub(pageID);
if (p == null) { return RedirectToAction("NotFound", "Error"); }
return View(p);
}
Репозиторий выглядит следующим образом:
private static Func<mvCmsContext, string, Page> _byStub =
CompiledQuery.Compile((mvCmsContext context, string pageTitle) =>
(from p in context.Pages
where p.pageTitle.Replace(" ", "-") == pageTitle
select p).SingleOrDefault());
public Page ByStub(string pageTitle)
{
return _byStub(context, pageTitle);
}
Надеюсь, что это поможет.
Изменить, чтобы добавить дубликат обработки:
private static Func<mvCmsContext, string, int> _pageExists =
CompiledQuery.Compile((mvCmsContext context, string pageTitle) =>
(from p in context.Pages
where p.pageTitle.Replace(" ", "-") == pageTitle
select p).Count());
public bool PageExists(string pageTitle)
{
return Convert.ToBoolean(_pageExists(context, pageTitle));
}
Подтверждает так:
IValidationErrors errors = new ValidationErrors();
if (CreateOrEdit == "Create")
{
if (pageRepository.PageExists(model.pageTitle) && !String.IsNullOrEmpty(model.pageTitle))
errors.Add("pageTitle", "A page with this title already exists. Please edit it and try again.");
}
Не существует встроенного способа сделать это, не требуя дополнительных надстроек и т. Д. – Cameron
@Cameron Конечно, есть: y ou может также определять маршруты в Global.asax так же легко, но я обнаружил, что использование чего-то вроде того, что я связал, конечно, стоит дополнительной библиотеки DLL. –
Как насчет того, чтобы просто изменить Home to News для всех методов в HomeController? – Cameron