Asp.net mvc 3 MVC 3-多个控制器或具有多个操作和路由的控制器
我正在建立一个足够简单的小册子网站,并决定使用MVC3作为一个学习机会。网站某些部分的内容将存储在数据库中,管理员可以通过简单的GUI进行更新。我决定不再使用预构建的CMS来学习如何用这种对我来说是新的语言进行数据库操作 我想要一个非常简单的URL结构:Asp.net mvc 3 MVC 3-多个控制器或具有多个操作和路由的控制器,asp.net-mvc-3,Asp.net Mvc 3,我正在建立一个足够简单的小册子网站,并决定使用MVC3作为一个学习机会。网站某些部分的内容将存储在数据库中,管理员可以通过简单的GUI进行更新。我决定不再使用预构建的CMS来学习如何用这种对我来说是新的语言进行数据库操作 我想要一个非常简单的URL结构: foo.com (home) foo.com/bio foo.com/news foo.com/about foo.com/events 等 实现这一点的简单方法是为每个页面使用一个控制器,并使用每个控制器的Index()ActionResu
foo.com (home)
foo.com/bio
foo.com/news
foo.com/about
foo.com/events
等
实现这一点的简单方法是为每个页面使用一个控制器,并使用每个控制器的Index()
ActionResult
为站点的每个页面配备一个控制器是否合适/最佳做法?新闻和事件没有子页面,但可能有分页,URL看起来像
foo.com/news/
foo.com/news/page2
foo.com/news/page3
foo.com/news/page4
如果我有一个控制器,并且使用了多个操作,那么默认情况下URL看起来像
foo.com (home)
foo.com/home/bio
foo.com/home/news
foo.com/home/about
foo.com/home/events
这将使我更新路由以实现我想要的。关于控制器的使用,我认为最好的做法是为操作域或内容域指定一个特定的控制器,而不是通过主菜单的层次结构 例如: 您的主页:
foo.com
控制器->主页
方法->索引
参数->空值
foo.com/news/2
控制器->新闻
方法->索引
参数->2
但是Home和News是两个不同的“相等”控制器,恰好用户与之交互的第一个控制器是Home控制器。如果您想使用单个控制器,您可以尝试
routes.MapRoute(
name: "Default",
url: "{action}/{page}",
defaults: new { controller = "Home", action = "Index", page = UrlParameter.Optional },
constraints: new { page = new PagingConstraint() }
);
作为路线定义。要仅允许“新闻”和“事件”的分页,请使用自定义路由约束
public class PagingConstraint : IRouteConstraint
{
private static readonly string[] PagingEnabledActions = new string[] { "news", "events" };
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
return string.IsNullOrEmpty(values[parameterName].ToString()) || new Regex(@"^[Pp][Aa][Gg][Ee][0-9]+$", RegexOptions.Compiled).IsMatch(values[parameterName].ToString())
&& PagingEnabledActions.Contains(values["action"].ToString().ToLower());
}
}
希望这有帮助。并没有特别回答这个问题。