C# 创建动态ActionResult
我在考虑为我自己的网站创建一个CMS,我认为创建页面和动态更新元标记和内容将是eaiser的职责。当我仔细考虑的时候,我意识到我可以更新内容,比如说C# 创建动态ActionResult,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我在考虑为我自己的网站创建一个CMS,我认为创建页面和动态更新元标记和内容将是eaiser的职责。当我仔细考虑的时候,我意识到我可以更新内容,比如说 public ActionResult Index() { ViewBag = "My Content"; return View(); } 但我从未想过要创建新页面,在数据库中引用它们,并使用正确的控制器 有没有办法在MVC中动态创建控制器/动作结果和相应的视图 问候 James您可以采用许多CMS系统使用的方法,即在数据库中为每个页
public ActionResult Index()
{
ViewBag = "My Content";
return View();
}
但我从未想过要创建新页面,在数据库中引用它们,并使用正确的控制器
有没有办法在MVC中动态创建控制器/动作结果和相应的视图
问候
James您可以采用许多CMS系统使用的方法,即在数据库中为每个页面分配一个ID以及页面内容,然后使用一个单独的控制器来查找和显示页面 即: 然后在页面中显示内容。如果内容包含HTML标记,请使用:
@Html.Raw(ViewBag.Content)
如果您确实需要页面的不同视图,通过相同的操作,您可以执行以下操作:
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");
}
public ActionResult Page(string url)
{
return Content("content for url");
}
但是,这被认为是一种不好的做法,请自行决定使用。
如果您想要友好的URL,我会这样做:
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");
}
public ActionResult Page(string url)
{
return Content("content for url");
}
然后你会有一条路线,看起来像:
routes.MapRouteLowercase(
"Page",
"{*url}",
new {controller = "CmsPage", action = "Page", url = UrlParameter.Optional});
好。。是的,但这比仅仅拥有一个好的路由/url方案和一个控制器加载所需的内容要复杂得多。