Spiga

图解MVC中的路由设置对应的Contorller和View

2012-01-26 03:33 by 梁逸晨, 409 visits, 收藏, 编辑

以上是默认的情况, 执行顺序我们这样理解: 

1:首先定位到HomeController类。

2:然后定位到Index方法。

 

关于类的映射

路由设置中,controller = "Home" 会映射到HomeController类, 而HomeController类的类名,我们需要拆分为两个单词去理解: "Home"+"Controller"。 路由会查找到前面的那个词语,并绑定之,在这里是属于名称半匹配。

 

关于方法的映射

action = "Index" 映射到 Index 方法,是属于全名匹配。

 

默认的例子可能会带来一个误会:让我们认为 "{controller}/{action}/{id}" ,这条规则一定会匹配 HomeController 类,实际不是这样。

我们在 Controllers 文件夹中添加一个另一个Controller类:TagsController

    public class TagsController : Controller
    {
        //
        
// GET: /Tags/
        public ActionResult Index()
        {
            return View();
        }

    }

 

并且添加对应的View:

 

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <title>Index</title>
</head>
<body>
    <div>
        this is tags
    </div>
</body>
</html>

 

然后在浏览器中输入: http://localhost:13812/tags/index/2 ,主机名称部分根据你的实际情况修改,关键是后面的/tags/index/2

 

看到了不? 浏览器中显示的是我们新添加的View的内容。

 

所以: 路由的匹配是动态的,它绑定的只是某一条地址规则: {controller}/{action}/{id}

 

地址中的 controller 部分你输入 home,它就映射到 homecontroller ,你输入tags, 它就映射到tagscontroller (只要它们已经存在就行)

action部分也是一样的道理,如果你输入 /home/about, 那么它就映射都homecontroller类的abut方法。

 

但是执行顺序是一定的: 首先映射类,然后映射方法

 

然后我们来说说路由设置中的的那个匿名对象, 它的作用是指定默认情况下应该映射到哪个类的哪个方法,什么是默认情况呢? 看下面的地址:

/home

/hone/index

/home/index/1

 

它们都会映射到:controller = "Home", action = "Index"

 

如果我们把匿名对象去掉,把路由修改成这样:

 

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}"
            );

 

这时候我们就只能访问 /home/index/1 ,也就是/类名/方法名/id,三个参数一个都不能少,id可以修改为任意字符串 。 因为此时就是严格匹配路径参数

 

标签: mvc
Add your comment

1 条回复

  1. #1楼 沐白      2012-02-03 17:14
    很形像
     回复 引用 查看