码迷,mamicode.com
首页 > Web开发 > 详细

ASP.NET MVC轻教程 Step By Step 8——路由

时间:2015-11-15 23:14:15      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:

在前面的教程里,细心的你可能会有个疑问,就是地址栏输入/Home/Write就可以进入留言页面。无论是静态HTML还是ASP/ASP.NET、PHP,URL都是和某个页面相关。比如假设有个URL是“www.xxx.com/index.aspx?id=1",浏览器请求的页面是index.aspx,同时带有名为id值为1的参数。那为什么输入/Home/Write可以进入留言页面?你可能会认为其中Write是与write.cshtml对应,其实不然,动作方法名与视图名相同是约定,并不是铁律,我们完全可以在Wirte动作方法中指定渲染其他名称的视图。如下代码所示。

        public ActionResult Write()
        {
            return View("Write2");
        }

修改后,Write方法将指定视图”Wirte2“显示。可见和URL相关联的并非视图而是控制器,实际上响应用户URL输入正是Controller的主要任务。问题是是什么使得URL与Controller联系到一起的,答案是路由机制。

Step 1. 认识路由

在解决方案资源管理器App_Start目录下的RouteConfig.cs文件保存着路由配置。

    public class 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 }
            );
        }
    }

RouteConfig类包含静态方法RegisterRoutes,MapRoute方法定义了路由规则,它包含三个参数:name指明了路由规则的名称,如果添加了多条路由规则,其名不可重复;url定义了地址的样式;defaults指定路由默认值。其中{controller}的默认值是Home,{action}的默认值是Index,而id是可选项。当运行程序时,默认的控制器是Home,默认的动作方法是Index,所以即使我们并没有输入/Home/Index执行的也是HomeController的Index方法。当我们输入/Home/Write时,匹配的controller是Home,action是Write,而id因为是可选的,所以没有也没关系。这样Url就和控制器对应了。

Step 2. 生成超链接

路由机制是双向的,不光可以从Url得到执行的Controller和Action,也可以由Controller和Action生成Url。在Index视图我们需要添加链接到留言页面的超链接,传统做法是使用<a>标签。

<body>
    <h1>MVC留言板</h1>
    <a href="/Home/Write">我要留言</a>
    @foreach (var message in Model)
    {
        <p>@message.NickName</p>
        <p>@message.Content</p>
        <p>@message.ReleaseDate</p>
        <br />
    }
</body>

现在我们可以使用HTML辅助方法来生成超链接。

<body>
    <h1>MVC留言板</h1>
    @Html.ActionLink("我要留言","Write")
    @foreach (var message in Model)
    {
        <p>@message.NickName</p>
        <p>@message.Content</p>
        <p>@message.ReleaseDate</p>
        <br />
    }
</body>

使用Html.ActionLink方法通过Write动作方法名来生成与前者一致的<a>标签,这里没有指明控制器名是因为Index与Write同属于HomeController,如果不是同一个控制器,那就再添加一个控制器名称的参数。

页面显示如下。

技术分享

路由是ASP.NET MVC非常重要又棘手的内容,特别是与我们原有的ASP/ASP.NET、PHP的经验有很大的差异,值得去深入挖掘思考。现在只是初步了解,接下来我们还会不断地和它打交道。

ASP.NET MVC轻教程 Step By Step 8——路由

标签:

原文地址:http://www.cnblogs.com/nivi3000/p/4966169.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!