在内容管理系统中,您通常可以动态创建页面,例如
www.website.com.au/home.aspx
www.website.com.au/projects.aspx
www.website.com.au/contact-us.aspx
在我们编写的先前CMS中,当用户选择在其站点中创建新页面时,我们在磁盘上物理创建了这些文件。我们从基本模板页面复制了新文件,重命名了文件,并在例如
后面的代码中重命名了该类template_page.aspx和template_page.aspx.cs变为
projects.aspx和projects.aspx.cs
这一切都是通过我们的CMS应用程序完成的。没有文件需要由用户手动创建。
这种方法如何使用MVC?
例如www.website.com.au/home /
www.website.com.au/projects /
www.website.com.au/contact-us /
据推测,我们需要动态创建控制器和视图吗?
这似乎比旧方法更麻烦,但我认为它是可行的。
有人能想到更聪明的方法吗?
答案 0 :(得分:0)
您应该可以使用一个控制器和一些视图(显示,创建,编辑)和一些路由工作。我为一个像这样的个人项目做了一个超级简单的实现。我将此路由放在路由列表的顶部附近,并使用约束来确定是否应将其视为我的规则中的静态页面。我的实现没有任何层次结构,即pages / About-us / contact - only / contact。
route:
routes.MapRoute("StaticContent", "{title}",
new { controller = "Page", action = "Details"},
new { title = new InvalidTitleContstraint()});
controller:
public class PageController : Controller
{
// Details checks if it can find a matching title in the DB
// redirects to Create if no match
public ActionResult Details(string title)
// GET
public ActionResult Create()
// POST
public ActionResult Create(Page page)
}