at("article{0}/edit/{{id}}", WebConfig.MvcHandle), new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { controller = "article", action = "edit", id = "0" }),
Constraints = new RouteValueDictionary(new { id = "\\d+" }),
});
routes.Add(new Route(string.Format("article{0}/delete/{{id}}", WebConfig.MvcHandle), new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { controller = "article", action = "delete", id = "0" }),
Constraints = new RouteValueDictionary(new { id = "\\d+" }),
});
routes.Add(new Route(string.Format("article{0}/{{action}}/{{page}}", WebConfig.MvcHandle), new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { controller = "article", action = "index", page = "1" }),
Constraints = new RouteValueDictionary(new { page = "\\d+" }),
});
routes.Add(new Route("default.aspx", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { controller = "article", action = "index", page = "1" }),
});
routes.Add(new Route("index", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { controller = "article", action = "index", page = "1" }),
});
}
其中,routing部分是如”/article/list/{category}/page”的部分,它定义了url的格式,更加清晰表明页面的意义.Defaults是默认的值, Constraints是对参数的正则验证,为了使用Constraints,传入的参数必须是String类型的.
然后到Web.Config中添加HttpModule
<add name="UrlRouting" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing"/>
<add name="UrlRoutingInit" type="MvcArticle.Web.Routing.RoutingModule, MvcArticle.Web"/>
第一个是MVC框架的Routing模块,第二个HttpModule中则是初始化Rouring的(一般初始化在Globle.ascx中,本Demo只是使用了另外一个方法.)
接下来,我们来创建Controllers部分,在Controllers目录下建立ArticleController控制器,该控制器被自动映射在”{controller}=”article”的url上,即所有访问url为article/…/…的url都归该类处理.而该类中的方法被成为Action,自动映射在Url中的Action部分.比如我访问/article/list/1/1实际上执行的是ArticleController类的List方法,而且该方法有两个参数,在本例中是访问了ArticleController.List(int category,int page)方法.默认情况下,Controller类中的所有方法都是Action,这点和Mvc的先前版本不一样,如果某个方法你不想让用户访问到,则可以加上[NonAction]属性.
关于View部分,默认的View页面应该要继承自System.Web.Mvc.ViewPage类,该类有泛型版和非泛型版,很显然,在显示数据的时候优先使用泛型版,比如demo中的list.aspx中, public partial class index : System.Web.Mvc.ViewPage<IList<ArticleContent>>此处就可以看出Controller传给View的数据是IList<ArticleContent>类型的,代码更易于维护.在MVC中,由于没了PostBack的概念,因此服务器控件都失去了交互性,因此在View部分完全可以抛弃服务器控件了,当然,如果想使用表现控件还是可以的,在本Demo中,则是和官方例子一样回归到使用内嵌c#代