zoukankan      html  css  js  c++  java
  • 基础才是重中之重~你是否真正在用MVC路由功能

    MVC开发环境为我们提供简单的,友好的,方便的,路由功能,我们可以通过global.asax对它进行URL路由的设置,它会帮助我们自己检索你controller下的action,它会根据你

    action的方法签名来进行路由重写的“匹配工作”,而且它的匹配是自上而下的,即第一个满足路由时,即重写URL。

    实例:我们希望得到的URL地址是这样的:

    怎么去实现?

    你可以会说,传个string的变量就可以了,这和原来的WEB FORM没有什么区别呀,如果你是这样实现的,那我要告诉你,你根据就没有用MVC的路由功能,正确的做法是

    在global.ascx中设置你的路由规则

    1    routes.MapRoute(
    2                 "myroute",
    3                 "{controller}/{action}/{grade}-{subject}-{version}",
    4                 new { controller = "Home", action = "About", grade = 0, subject = 0, version = 0 }
    5             );

    注意,要把特殊的规则放在最上面,否则它有可能会被其它规则代替。

    然后就是你的action的方法签名了,要来你的路由匹配,这当然很正常

    1       public ActionResult About(int? grade, int? subject, int? version)
    2         {
    3             ViewBag.query = string.Format("grade:{0},subject:{1},verson{2}", grade, subject, version);
    4             return View();
    5         }

    最后,我们在URL上输入测试地址,结果如下:

    如果,你希望为这个页面添加链接,请使用MVC的HtmlHelper的扩展方法,不要用<a>标签了,如果非要用<a>,那你的href需要使用Url.Action来设置地址,这样才能被MVC路由匹配上。

    1 @Html.ActionLink("一年级语文人教版", "About", new { grade = 1, subject = 1, version = 1 })
    2 @Html.ActionLink("二年级数学人教版", "About", new { grade = 2, subject = 2, version = 1 })

    当然,如果你的参数只能出现数字,你也可以对它进行约束,像这样:

    1          routes.MapRoute(
    2                 "Default", // 路由名称
    3                 "{controller}/{action}/{id}", // 带有参数的 URL
    4                 new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // 参数默认值
    5                 new { grade = @"^\d+$", subject = @"^\d+$", version = @"^\d+$" }
    6             );

    如果用户输入非数字的参数,即当它不匹配规则时,它将无法把被重写的参数带到action中,这是正常的,除非你用?grade=a这种格式,当然用这个就与URL重写没有关系了,因为它是通过

    HTTP请求获得的数据,我们今天主要说的是URL重写,即URL的规范性。

  • 相关阅读:
    kernel_size
    pytorch:修改预训练模型
    Python yield使用浅析
    respberry2b + android5.1
    android中调用c++文件并转为so
    图像灰度化
    图像的高斯平滑滤波
    历届试题 分考场
    头发啊头发
    历届试题 合根植物
  • 原文地址:https://www.cnblogs.com/lori/p/2691113.html
Copyright © 2011-2022 走看看