こんにちは、複雑な問題を回避する必要があるように思われますが、解決できると確信しています。C# でコンテンツを動的に管理する MVC4 アプリケーションを作成する必要があります。コントローラーを作成してビューにマッピングする方法は理解していますが、これを動的に行う方法がわかりません。シナリオは次のとおりです。
ユーザーが CMS に入り、Web サイトのルート内の新しいフォルダーに仮想タイプのページを作成します。このフォルダーとページは、私の MVC アプリケーションには存在しません。新しいページにアクセスするための URL は、website.com/newfolder/newpage のようになります。ユーザーが新しいページで読み込むビューとして選択する全幅のページ ビューがあります。
したがって、私の質問は、上記の URL を取得して正しいビューを提供し、URL 構造を動的に保持できる MVC コントローラーとアクションを作成する方法です。私はいくつかのことを読みましたが、それらは私がやろうとしていることではないようです.
どんな助けでも素晴らしいでしょう。
乾杯
更新 29/09/2015 以下にコメントして、最終的にこれがどのように行われたかを尋ねる場合は、ルート構成と動的コントローラーのコードを以下に示します。
ルート設定
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name:"Gallery",
url: System.Configuration.ConfigurationManager.AppSettings["gallerycontroller"] + "{id}",
defaults: new { controller = "Component", action = "Gallery", id = UrlParameter.Optional });
routes.MapRoute(
name: "ContactForm",
url: System.Configuration.ConfigurationManager.AppSettings["contactcontroller"] + "{action}/{id}",
defaults: new { controller = "ContactUs", action = "ContactForm", id = UrlParameter.Optional });
routes.MapRoute(
name: "Dynamic", url: "{*page}", defaults: new { controller = "Master", action = "Load", page = UrlParameter.Optional}
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
マイ ダイナミック ページ コントローラー
public class MasterController : Controller
{
public ActionResult Load(string page)
{
if (page == null)
{
//load default page
ContentDelivery _cd = new ContentDelivery(System.Configuration.ConfigurationManager.AppSettings["ContentDelivery"]);
ContentPage _cp = _cd.GetPage(1);
if (_cp != null)
{
string _view = "PageViews/" + _cp.PageView;
return View(_view, _cp);
}
else
{
return View("PageViews/404Page");
}
}
else
{
ContentDelivery _cd = new ContentDelivery(System.Configuration.ConfigurationManager.AppSettings["ContentDelivery"]);
ContentPage _cp = _cd.GetPage(page);
if (_cp != null)
{
string _view = "PageViews/" + _cp.PageView;
return View(_view, _cp);
}else{
return View("PageViews/404Page");
}
}
}
}
明らかに、サービス レイヤーと動的コンテンツ用のデータベースでさらに多くのコードが実行されていますが、誰かの役に立てば、これも共有できます。
ありがとう