第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);
}
}
}
如图所示:

六、在"表示层"添加一个根据名字分类方法
代码示例:
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();
}
}
}
}
}
如图所示:

七、最后在"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();
}
}
}
如图所示:

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

第2章 ASP.NET MVC(URL、路由及区域)的更多相关文章
- asp.net MVC URL路由入门指南
asp.net MVC 的URL路由是一个非常强大的功能,而且有个优点:强大单不复杂.然而,目前我在网上看到的相关资料,却都仅仅提供一些示例,仅通过这些示例,初学者基本上不可能明白为什么要这么配置,更 ...
- ASP.NET MVC——URL路由
在MVC之前,ASP.NET假设请求的URL与服务器上的文件之间有关联,服务器接受请求,并输出相应的文件.而在引入MVC后,请求是由控制器的动作方法来处理的.为了处理URL,便引入了路由系统. 首先我 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (21) -----第四章 ASP.NET MVC中使用实体框架之在页面中创建查询和使用ASP.NET URL路由过虑
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 4.2. 构建一个搜索查询 搜索数据是几乎所有应用的一个基本功能.它一般是动态的,因 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章 ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...
- ASP.NET MVC URL重写与优化(1)-使用Global路由表定制URL
ASP.NET MVC URL重写与优化(1)-使用Global路由表定制URL 引言--- 在现今搜索引擎制霸天下的时代,我们不得不做一些东西来讨好爬虫,进而提示网站的排名来博得一个看得过去的流量. ...
- ASP.NET MVC 自定义路由中几个需要注意的小细节
本文主要记录在ASP.NET MVC自定义路由时,一个需要注意的参数设置小细节. 举例来说,就是在访问 http://localhost/Home/About/arg1/arg2/arg3 这样的自定 ...
- 理解ASP.NET MVC的路由系统
引言 路由,正如其名,是决定消息经由何处被传递到何处的过程.也正如网络设备路由器Router一样,ASP.NET MVC框架处理请求URL的方式,同样依赖于一张预定义的路由表.以该路由表为转发依据,请 ...
- ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase
原文地址:http://www.51csharp.com/MVC/882.html ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL 引言-- 在初级篇中,我们 ...
- 返璞归真 asp.net mvc (2) - 路由(System.Web.Routing)
原文:返璞归真 asp.net mvc (2) - 路由(System.Web.Routing) [索引页] [源码下载] 返璞归真 asp.net mvc (2) - 路由(System.Web.R ...
随机推荐
- Android Weekly Notes Issue #233
Android Weekly Issue #233 November 27th, 2016 Android Weekly Issue #233 本期内容包括: 用Mockito做RxJava的单元测试 ...
- React Native 之TabBarIOS
前言 学习本系列内容需要具备一定 HTML 开发基础,没有基础的朋友可以先转至 HTML快速入门(一) 学习 本人接触 React Native 时间并不是特别长,所以对其中的内容和性质了解可能会有所 ...
- 慎用mutableCopy
因为逻辑需要,我在present到一个页面时,将一个存放uiimage的数组mutablecopy了过去(因为再返回的时候防止对数组做了改动),时间长了也忘了这事儿,后来发现添加多张图片上传时,app ...
- RunLoop 总结:RunLoop的应用场景(二)
上一篇讲了使用RunLoop保证子线程的长时间存活,而不是执行完任务后就立刻销毁的应用场景.这一篇就讲述一下RunLoop如何保证NSTimer在视图滑动时,依然能正常运转. 参考资料 好的书籍都是值 ...
- Undefined symbols for architecture arm64解决方案
在iOS开发中经常遇到的一个错误是Undefined symbols for architecture arm64,这个错误表示工程某些地方不支持arm64指令集.那我们应该怎么解决这个问题了?我们不 ...
- Appfuse:扩展自己的GenericManager
通过代码生成机制的appfuse访问数据都通过GenericManager来实现,GenericManager默认提供了以下几个方法: package org.appfuse.service; imp ...
- 0036 Java学习笔记-多线程-创建线程的三种方式
创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...
- hadoop常用的操作命令
1.显示hdfs上test目录下的所有文件列表 hadoop fs -ls /test/ 2.查看hdfs中的文件内容 hadoop fs -cat /daas/bstl/term/rawdt/201 ...
- nandflash驱动程序编写
NAND FLASH是一个存储芯片 那么: 这样的操作很合理"读地址A的数据,把数据B写到地址A" 问1. 原理图上NAND FLASH和S3C2440之间只有数据线, 怎么传输地 ...
- Salesforce Apex 开发环境设置和Hello World示例
本文介绍了Salesforce Apex开发环境的设置以及一个简单的Hello World示例的实现过程. Salesforce开发环境 Salesforce通过http://developer.fo ...