我最近根据如何根据内容表创建了一个问题,其中包含以下内容:标题和内容。根据我的理解,我在answer that was given。
中按照步骤进行操作我创建了一条路线:
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项目的默认布局,并且顶部有选项卡,我也会根据数据库中的标题创建一组指向页面的选项卡
答案 0 :(得分:1)
主要问题是当您使用标题时,路由引擎将其与第一条路线匹配,并尝试按该标题查找控制器。我们已经实现了类似的东西,并发现通过显式定义哪些控制器对默认路由有效,它然后适当地处理了请求。我给出了一个控制器示例,我们允许它们适合我们的默认路由(主页,帮助和错误)。
您可能还希望阻止人们将内容与您的根级控制器相同的 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"});
}
}