• 第2章 ASP.NET MVC(URL、路由及区域)


    ASPNET MVC URL、路由及区域

    一、URL、路由及区域

    一、      配置路由器

    1、         URL模式

    2、         定义路由默认值

    3、         使用静态URL

    4、         Route顺序

    5、         自定义段变量

    6、         使用action方法参数

    7、         通过浏览器传参数

    1、         在路由表中定义路由,需要对参数命名

    2、         获取参数值:

    1)、通过控制器中的action方法,如List(string cate),需要方法中的参数名和路由表中的参数相同,RouteData.Values[Key]获取,key为参数名,如果获取的是对象,可以通过模型绑定机制实现

    二、      生成输出的URLS

    1)         视图中静态链接

    1、ActionLink:对应控制器/动作,使用默认路由

    参数:new{参数=值,…}

    样式:new{@class=样式名}

    2、RouteLink:使用指定路由

    格式:<a/>:控制器/动作/参数

             2) 动态转向

             1、  Redirect(url):参数是url地址

             2、RedirecrToAction(action,Name,controllerName),参数为动作名和各种控制名

             3、 RedirectToRoute(routeName,routeValues),转向到指定路由

                        routeName:路由名

                         routeValues=new{controller=value,action=value,id=value}

    二、结合第一章MVC内容,设置产品分类显示

    1、在"MVCProduct"项目单击右键添加“区域”,名字设为“Areas”

    如图所示:

    2、在“Areas”文件里面的“Controller”文件添加“控制器”名为“HomeController”

    如图所示:

    3、继续在“Areas”文件里面的“Controller”文件添加“控制器”名为“HomeController.cs”页面方法里"Index()"添加一个视图

    如图所示:

    三、设置”路由“添加路由参数“

    如图所示:

    四、给"路由"添加对应"控制器名字",名字可以在"Controller"文件里面"HomeController.cs"页面

    如图所示:

    五、复制名字后,把它放在"路由参数里面"

    代码示例:

    using System;
    using System.Collections.Generic;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Routing;
    
    namespace MvcProduct
    {
        // 注意: 有关启用 IIS6 或 IIS7 经典模式的说明,
        // 请访问 http://go.microsoft.com/?LinkId=9394801
    
        public class MvcApplication : System.Web.HttpApplication
        {
            public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
                filters.Add(new HandleErrorAttribute());
            }
    
            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
                routes.MapRoute(
                 "cate", // 路由名称
                 "{controller}/{action}/{cate}", // 带有参数的 URL
                 new { controller = "Home", action = "Index", cate = UrlParameter.Optional }, // 参数默认值
                 new[] { "MvcProduct.Controllers" }
             );
    
                routes.MapRoute(
                    "Default", // 路由名称
                    "{controller}/{action}/{id}", // 带有参数的 URL
                    new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // 参数默认值
                    new[] { "MvcProduct.Controllers" }
                );
    
            }
    
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
    
                // 默认情况下对 Entity Framework 使用 LocalDB
                Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");
    
                RegisterGlobalFilters(GlobalFilters.Filters);
                RegisterRoutes(RouteTable.Routes);
            }
        }
    }
    View Code

     如图所示:

     

    六、在"表示层"添加一个根据名字分类方法

    代码示例:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using LinqService;  //引用
    namespace LinqBLL
    {
        public class ProductBll
        {
            public List<Product> GetProduct()
            {
                using (SportsStoreEntities se = new SportsStoreEntities())
                {
                    var products = se.Product;  //数据库里面表名称
                    return products.ToList();
                }
            }
            //通过分类名获取体育产品列表
            public List<Product> GetProductByCateName(string cate)
            {
                using(SportsStoreEntities se=new SportsStoreEntities())
                {
                    if (string.IsNullOrEmpty(cate))
                    { 
                        var products=se.Product;
                        return products.ToList();
                    }
                      else  //查找对应分类数据
                    {
                        var books = from a in se.Product                           
                                    where a.Name.Contains(cate)
                                    select a;
                        return books.ToList();
                    }
                }
            }
        }
    }
    View Code

     如图所示:

    七、最后在"MvcProduct"项目调用方法可以了,把之前方法注释掉

    代码示例:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    using LinqBLL;
    using LinqService;
    namespace MvcProduct.Controllers
    {
        public class HomeController : Controller
        {
            ProductBll bll = new ProductBll();
            public ActionResult Index()
            {
                ViewBag.Message = "欢迎使用 ASP.NET MVC!";
                return View();
            }
            ////获取产品
            //public ActionResult List() 
            //{
            //    List<Product> ps = bll.GetProduct();
            //    return View(ps);
            //}
    
            public ActionResult List(string cate)
            {
                List<Product> ps = bll.GetProductByCateName(cate);
                return View(ps);
            }
            public ActionResult About()
            {
                return View();
            }
        }
    }
    View Code

     如图所示:

    八、运行结果:输入要分类名称就可以了

    艺术
  • 相关阅读:
    设置VMware Player中的虚拟机和宿主机共享文件
    C++20尝鲜:概念(Concepts)
    ReactiveX 学习笔记(31)ReactiveUI 使用笔记
    TypeScript语言学习笔记(4)枚举
    TypeScript语言学习笔记(3)函数,泛型
    趣味编程:FizzBuzz(Haskell版)
    Haskell语言学习笔记(95)Semiring
    Haskell语言学习笔记(94)Enum Bounded
    ReactiveX 学习笔记(30)操作符辨析
    ReactiveX 学习笔记(29)使用 RxCpp(RxQt)+ Qt 进行 GUI 编程
  • 原文地址:https://www.cnblogs.com/xuyangyang/p/6251437.html
Copyright © 2020-2023  润新知