私は自分のサイト上で行うことは、私はページタイトルを持つことができる場合にはページのタイトルやページスタブのいずれかに対してURLを確認することです同じ名前の複数の名前を持つように、タイトルの代わりにスタブを使用したい場合は、「今週の写真」を投稿するサイトがある場合は同じ名前を使用します。
URLは次のようになります。
routes.MapRoute("Pages", "{controller}/{pageID}", new { controller = "Page", action = "Index", pageID = "Home" });
PageControllerではこれです:http://mySite.com/Page/Verse-of-the-Week
Global.asaxのは、この含まれてい
[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 Global.asaxで簡単にルートを定義することはできますが、リンクしたようなものを使うと余分なDLLの価値があることがわかりました。 –
HomeController内のすべてのメソッドについてHome to Newsを変更するだけではどうですか? – Cameron