-1

我最近问了一个问题,基于如何基于包含以下内容的内容表创建页面:标题内容。据我了解,我在给出的答案中遵循了这些步骤。

我创建了一条这样的路线:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

        routes.MapRoute(
            "ContentManagement",
            "{title}",
            new { controller = "ContentManagement", action = "Index", title = "{title}" }
        );

    }

我假设我可以做这样的路线?在哪里可以设置多条路线?我还假设我可以像我所做的那样将标题传递给控制器​​操作?

然后我创建了模型:

namespace LocApp.Models
{
    public class ContentManagement
    {
        public int id { get; set; }
        [Required]
        public string title { get; set; }
        public string content { get; set; }
    }
}

从那我创建了一个带有索引操作的控制器,看起来像这样:

    public ViewResult Index(string title)
    {
        using (var db = new LocAppContext())
        {
            var content = (from c in db.Contents
                           where c.title == title
                           select c).ToList();

            return View(content);

        }
    }

所以我创建了一些标题为“bla”的内容,所以当我访问 site.com/bla 时,我收到一个错误,它找不到“bla/”

有人可以告诉我我做错了什么吗?如果您熟悉带有顶部选项卡的 asp.net mvc 项目的默认布局,我也会根据数据库中的标题创建一组通向页面的选项卡

4

1 回答 1

1

主要问题是,当您使用标题时,路由引擎会将其与第一个路由匹配,并尝试通过该标题查找控制器。我们已经实现了类似的东西,并发现通过明确定义哪些控制器对默认路由有效,然后它会适当地处理请求。我在下面给出了一个我们允许适合我们默认路由的控制器示例(Home、Help 和 Error)。

您可能还希望阻止人们为内容提供与您的根级别控制器相同的TITLE,因为这会很好地解决这个问题。

    public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
                "Default",
                "{controller}/{action}/{id}",
                new {controller = "Home", action = "Index", id = UrlParameter.Optional},
                new {controller = "Home|Error|Help"},
                new[] {"UI_WWW.Controllers"});

            routes.MapRoute(
                "ContentManagement",
                "{title}",
                new {controller = "ContentManagement", action = "Index"});    

            }
}
于 2013-04-25T16:26:44.130 回答