mvc路由5大属性(2)

DetaTokens属性:

该属性是附加自定义值的集合,这些自定义的值将被传递到路由处理程序,但不参与路由拼配过程,在动作内部,只能通过控制器的RouteData属性访问在DataTokens中包含的值

 示例:

 如果有一个新站点:并且通过url设置需要访问数据库

 解决方案一:

         路由定义: Route bolg = new Route(

 

                "blog/{database}/{year}/{month}/{day}",

                new MvcRouteHandler()

                );

            blog.Defaults = new RouteValueDictionary(

                new

                {

                    controller = "Home",

                    action = "index"

                }

                );

            bolg.Constraints = new RouteValueDictionary(

                new

                {

                    database = "database1 |database2",

                    year = @"\d{2}|\d{4}",

                    month = @"\d{1,2}",

                    day = @"\d{1,2}"

                }

                );

            routes.Add(blog);

 

     Action定义:

public ActionResult Index(string database ,string year,string month ,string day)

        {

            string constr = string.Empty;

            switch (constr)

            {

                case "database1":

                    constr = "database1_constr";

                    break ;

                case "database2":

                    constr = "database2_constr";

                    break ;

              

            }

            ViewData["Database_Msg"] = string.Format("connecting to database {0}", constr);

            return View();

        }

解决方案二:

示例:

  路由: Route sport= new Route(

 

                "blog/sport/{year}/{month}/{day}",

                new MvcRouteHandler()

                );

            sport.Defaults = new RouteValueDictionary(

                new

                {

                    controller = "Home",

                    action = "index"

                }

                );

            sport.Constraints = new RouteValueDictionary(

                new

                {

                   

                    year = @"\d{2}|\d{4}",

                    month = @"\d{1,2}",

                    day = @"\d{1,2}"

                }

                );

            sport.DataTokens = new RouteValueDictionary(

                new { database = "sport" });

            routes.Add(sport);

 

     Route arch= new Route(

 

                "blog/arch/{year}/{month}/{day}",

                new MvcRouteHandler()

                );

            arch.Defaults = new RouteValueDictionary(

                new

                {

                    controller = "Home",

                    action = "index"

                }

                );

            arch.Constraints = new RouteValueDictionary(

                new

                {

                   

                    year = @"\d{2}|\d{4}",

                    month = @"\d{1,2}",

                    day = @"\d{1,2}"

                }

                );

            arch.DataTokens = new RouteValueDictionary(

                new { database = "arch" });

            routes.Add(arch);

     DataTokens 动作中使用:

     public ActionResult Index(string year,string month ,string day)

        {

          

        ViewData["Database_Msg"] = string.Format("connecting to database   {0}", RouteData.DataTokens["database"]);

            return View();

        }

RouteHandler属性:

处理请求的类的一个实例,处理请求类总是MvcRouteHandler,如果不希望默认方式,可以通过实习IRouteHandler接口及其唯一的方法GetHttpHandler,这样会导致无法继承Mvc。

posted @ 2012-03-23 13:37  sulin  阅读(220)  评论(0编辑  收藏  举报