我想不出这篇文章的合理标题。
我遇到的问题是我的MVC网站附有一个SQL数据库。在我的网站上,我有一个新闻/博客系统,我已将其存储在数据库中,并根据请求提取信息。
问题在于路由。我目前已将其设置为提取有关每个页面的路由的信息,如下所示:
var newsr = new NewsResources();
foreach(newsr.GetAllNewsItems()中的var项目) { item.Title = item.Title.Replace('',' - ')。ToLower();
routes.MapRoute(item.Title, "News/" + item.Title, new {controller = "News", action = "Post", id = item.ID});}
但是,当我添加新的新闻时,这不会进入路由系统,这被证明是一个正确的痛苦。我有一个谷歌搜索动态添加网址路由,但我似乎无法找到解决方案。
我想知道的是,将帖子保存到数据库后,是否可以通过页面控制器向路由系统添加页面?
答案 0 :(得分:3)
我认为您不需要在所有PO项目中执行For Each循环并为其添加路由。你可以这样做
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapRoute("SingleItem", "News/{title}",
new { controller = "Items", action = "PostFromTitle" });
// and the generic route
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);
}
这会将../News/SomeTitle
请求发送到您PostFromTitle
NewsController
的{{1}}操作方法。阅读那里的标题并从那里得到帖子。
public ActionResult PostFromTitle(string title)
{
var post=repo.GetPostFromTitle(title);
return View("~/Views/News/Post.cshtml",post);
}
答案 1 :(得分:0)
将标题作为参数的动作可能会更好。
routes.MapRoute("NewsItem", "News/{title}",
new { controller = "News", action = "ShowNews" }