Was ich auf meinen Seiten ist, dass ich die URL entweder gegen die Seitentitel oder Seite Stub in Fällen überprüfen, in denen die Seitentitel die haben könnte gleichen Namen zum Beispiel, wenn Sie eine Website, die ein „Bild der Woche“ postet man einen Stub statt Titel verwenden möchten, wie Sie die Multiples gleiche Sache benannt haben werden.
URLs wie folgt aussehen: http://mySite.com/Page/Verse-of-the-Week
Global.asax enthält diese:
routes.MapRoute("Pages", "{controller}/{pageID}", new { controller = "Page", action = "Index", pageID = "Home" });
Pagecontroller ist dies:
[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);
}
Das Repository sieht wie folgt aus:
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);
}
Ich hoffe das hilft.
bearbeiten doppelte Handhabung hinzuzufügen:
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));
}
wie dieser Test prüft:
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.");
}
Gibt es keine eingebaute Möglichkeit, dies ohne zusätzliche Add-ons etc. zu tun? – Cameron
@Cameron Sicher gibt es: y Sie können Routen in Global.asax genauso einfach definieren, aber ich habe festgestellt, dass die Verwendung von etwas wie dem, mit dem ich verlinkt habe, die zusätzliche DLL definitiv wert ist. –
Wie wäre es, wenn Sie Home to News für alle Methoden des HomeControllers ändern würden? – Cameron