创建动态ActionResult

时间:2013-11-15 13:44:33

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我正在考虑为我自己的网站创建一个CMS,我认为创建页面并动态更新元标记和内容将更加容易。当我更多地考虑它时,我意识到我可以更新内容... ...

public ActionResult Index()
{
  ViewBag = "My Content";
  return View(); 
}

但我从未想过创建新页面,在我的数据库中引用它们,以及使用正确的控制器。

有没有办法在MVC中动态创建Controllers / ActionResults和相应的视图?

亲切的问候

詹姆斯

3 个答案:

答案 0 :(得分:0)

您可以采用许多CMS系统使用的方法,即为每个页面分配数据库中的ID以及页面内容,然后使用单个控制器查找并显示页面

即:

public ActionResult Index(string pageID)
{
    //Query the database for content for page with ID of pageID
    ViewBag.Content = //Result from DB;
    return View(); 
}

然后在您的页面中显示内容。如果内容包含HTML标记,请使用:

@Html.Raw(ViewBag.Content)

答案 1 :(得分:0)

如果您对页面完全需要不同的视图,请执行相同的操作,您可以执行以下操作:

public ActionResult Index(string pageID)
{
    //Query the database for content for page with ID of pageID
    ViewBag.Content = //Result from DB;
    return View("/path/to/other/view"); 
}

但是,这被认为是一种不好的做法,可以自行决定使用。 http://forums.asp.net/t/1596709.aspx

答案 2 :(得分:0)

如果你想要友好的URL,我会做这样的事情:

public ActionResult Page(string url)
{
    return Content("content for url");
}

然后你会有一条看似如下的路线:

routes.MapRouteLowercase(
    "Page",
    "{*url}",
    new {controller = "CmsPage", action = "Page", url = UrlParameter.Optional});