嗨,我有一个似乎很复杂的问题要解决,但我确信它可以完成。我需要在 C# 中创建一个动态内容管理的 MVC4 应用程序。我了解如何创建我的控制器并将它们映射到视图,但我不知道如何动态地执行此操作。场景如下:
用户进入 CMS 并在网站根目录中的新文件夹中创建虚拟类型页面。我的 MVC 应用程序中不存在此文件夹和页面。访问新页面的 URL 类似于 website.com/newfolder/newpage。我有一个全角页面视图,用户选择它作为与新页面一起加载的视图。
所以我的问题是如何创建一个 MVC 控制器和操作,它可以获取上面的 url 并为我提供正确的视图并动态保持 url 结构。我已经阅读了一些东西,但它们似乎并不是我想要做的。
任何帮助都会很棒。
干杯
2015 年 9 月 29 日更新 对于那些在下面评论以询问最终是如何完成的,我的路由配置和动态控制器的代码如下。
路由配置
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");
}
}
}
}
显然,在我的服务层和动态内容的数据库中还有更多的代码,但如果它对任何人有帮助,我也可以分享它。
谢谢