マイセットアップ
通常の方法でコントローラーのセットがあり、その中に通常の CRUD アクション メソッドがあります。これらの管理者の例は、証言、ギャラリー、FAQ です。これらには、それぞれ Testimonial、Gallery、FAQ などの Entity Framework のバッキング モデルがあります。
これらには、次のような URL でアクセスできます: /Galleries/Edit/2 ここまではすべて問題なく、すべて既定の規則で...
また、編集可能なコンテンツを含める必要がある一連のページもあり、これらには Entity Framework を介してデータベースからコンテンツが取り込まれています。その背後で「ページ」と呼ばれる EF モデルを使用します。これには content プロパティ (html) と name プロパティがあり、着信要求を照合できます。これらのページは、ホーム、概要、および価格のページです。
これを行うためにホームコントローラーを選択しました-名前パラメーターによってDBからどのページをロードするかをインデックスアクションに解決させるつもりです:
[AllowAnonymous]
public ActionResult Index(string name = "Home")
{
// look up the page by name in the DB.
var model = context.Pages.FirstOrDefault(p => p.Title == name);
// trap errors.
if (model == null)
{
return RedirectToAction("NotFound", "Error", new { aspxerrorpath = name } );
}
// normal path
return View(model);
}
したがって、理論的には新しい項目を Pages テーブル/DbSet に追加することができ、これらはこのコントローラーとアクションに適切にマップされます。次に、上記のインデックス アクションと同じ署名を持つコンテンツを編集するために、管理者用の編集アクションを追加します。
問題
問題はルーティングリクエストに付属しています...
2 つの初期ルートがありました。
routes.MapRoute("DynamicAccess",
"{name}/{action}",
new { controller = "Home", action = "Index" });
routes.MapRoute("Default",
"{controller}/{action}/{id}",
new { controller = "Home", action="Index", id=UrlParameter.Optional});
これは、毎回ホームコントローラーを通過するため、「ギャラリー/」に移動すると失敗し、それらを交換すると失敗します。また、ホームコントローラーにも Scripts/ フォルダーのリクエストを取得していました....
私の一時的な解決策
現在のルートは次のようになります。
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("favicon.ico");
routes.MapRoute("Gallery",
"Gallery/{action}/{id}",
new { controller = "Galleries", action = "Index", id = UrlParameter.Optional });
routes.MapRoute("Testimonials",
"Testimonials/{action}/{id}",
new { controller = "Testimonials", action = "Index", id = UrlParameter.Optional });
routes.MapRoute("FAQs",
"FAQs/{action}/{id}",
new { controller = "FAQs", action = "Index", id = UrlParameter.Optional });
routes.MapRoute("DynamicAccess",
"{name}/{action}",
new { controller = "Home", action = "Index" });
routes.MapRoute("Default",
"{controller}/{action}/{id}",
new { controller = "Home", action="Index", id=UrlParameter.Optional});
routes.MapRoute("Root",
"",
new { controller = "Home", action = "Index" });
routes.MapRoute("AdminAccess",
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
new { authenticated = new AuthenticatedAdminRouteConstraint() });
ここで、動的に解決されるホーム ルートのルートの上に、静的ページごとにルートを宣言する必要があることがわかります。
質問
これは私には不器用に見えます-動的ではない各ページをルートテーブルに追加する必要があります。誰かがこれを行うためのよりクリーンな方法を教えてもらえますか?
前もって感謝します。