zoukankan      html  css  js  c++  java
  • ASP.NET MVC 学习一之路由

     

    本次学习的所有开发环境皆为VS2012+MVC4

    一:什么是MVC:

         假设你是第一次学习MVC,好吧我们不去理解它内部是如何去实现功能的,我们只从它表面的字母意思先去入门理解吧

         M:models(模型)  V:view(视图)  C:controllers(控制器)

        先不要去纠结这三个字母是什么东西吧,以及这三个东西有什么用!我们所要用的就是先记下这个三个字母!呵呵,是不是有点死记硬背的赶脚,我也是这么觉得的,有点想扔砖的感觉!(麻痹,博主想讲的啥!!!-__-!)

    二:MVC学习之路由

    在此新建一个测试项目Home,并添加一个Controllers取名为HomeControllers,并为其添加一个Index视图;

    项目文件如图:

    image

    双击打开Index.cshtml视图,更改其代码:

    @{
        ViewBag.Title = "Index";
    }
    
    <h2>Hello World</h2>

    运行项目我们已经发现程序能正确运行

    image

    也许到这你可能会惊讶于mvc是如何能工作并找到其工作文件的.

    呵呵,聪明的你可能已经猜到了接下来就是路由登场了。

    image

    双击RouteConfig文件

    public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                );
            }

    这就是MVC内部定义的路由机制

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    对着句代码的意思先暂且理解为对所有axd的资源 进行忽略,直接进行URL访问

    routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                );

    这是一条简单的路由规则,name属性定义了路由的名称,url定义了路由的映射机制,defaults定义了路由的默认参数

    实际{controller}就是对应着我们前面的controller的名称Home,action对应我们前面定义的Index,所以我们在浏览器中输入

    www.Test.com/Home/Index就可以成功看到效果了!

    好吧,到这里我们来定义一个属于自己的路由吧

    routes.MapRoute(
                    name: "myRoute",
                    url: "{controller}-{action}"
                    );

    这里我没有给myRoute的路由定义默认的属性,当然我们运行项目,项目初始化后当然是找不到的,手动在浏览器中输入

    www.Test.com/Home-Index就可以正确显示视图了,到这你是不是能体会到mvc的一个优势来呢,当然你可以定义更多个性化的url路由来方便SEO

    routes.MapRoute(
                    name: "myRoute",
                    url: "{controller}-{action}"
                    );
                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                );

    这里需要补充一下,在这个项目中如果定义了两个路由规则,mvc会自动从上往下匹配路由规则,如果myRoute的路由规则没有匹配上就会匹配default的路由规则,如果两个都没匹配到,则会报错!

    路由值的简单约束

    刚才在name为“Default”的路由上id = UrlParameter.Optional,这句话的意思是id为可选输入,当我们去掉id = UrlParameter.Optional的时候,运行项目发现报错了,在url上给地址加上www.Test.com/Home/Index/1路由正确。

    routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                    //加上路由值的条件约束
                    constraints: new
                    {
                        id = @"d+"
                    }
                );

    此时我们给路由器的id属性添加一个约束条件规定id只能为数字,如果此时在浏览器输入

    www.Test.com/Home/Index/1test的url则会报错

    附上一个自己总结的几个路由规则吧

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                    constraints: new { controller = @"d{4}" }
                   // constraints: new { controller =@"d{4}"}
                    );
                      //hotels/所有匹配
                routes.MapRoute(
                    name: "酒店首页",
                    url: "Home/{*values}",
                    defaults: new { controller = "Home", action = "Index", hotelid = "" }
                );
                routes.MapRoute(
                    name: "网站首页",
                    url: "{*values}",
                    defaults: new { controller = "Home", action = "Index" }
                    );
  • 相关阅读:
    ADFUtils
    JSFUtils
    3.为JDeveloper添加不能的workspace
    ADF系列-3.VO的查询
    ArcGIS api for javascript——地图配置-增加一个调试控制台<
    ArcGIS api for javascript——显示多个ArcGIS Online服务
    ArcGIS api for javascript——放大时切换图层
    ArcGIS api for javascript——明确的创建图层列表
    ArcGIS api for javascript——动态创建图层列表
    ArcGIS api for javascript——使用图层定义显示地图
  • 原文地址:https://www.cnblogs.com/ilooking/p/4087191.html
Copyright © 2011-2022 走看看