最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET?MVC實(shí)現(xiàn)區(qū)域路由

 更新時(shí)間:2022年03月16日 08:36:52   作者:.NET開發(fā)菜鳥  
這篇文章介紹了ASP.NET?MVC實(shí)現(xiàn)區(qū)域路由的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、區(qū)域路由

為了管理網(wǎng)站中大量的文件,在ASP.NET MVC 2.0版本中引入了一個(gè)新概念:區(qū)域(Area)。

有了區(qū)域以后,可以讓我們的項(xiàng)目不至于太復(fù)雜而導(dǎo)致管理混亂。每個(gè)模塊的頁面都放入相應(yīng)的區(qū)域內(nèi)進(jìn)行管理很方便。看下面的截圖:

上圖中有兩個(gè)模塊:一個(gè)是User模塊,另一個(gè)是Product模塊,所有關(guān)于這兩個(gè)模塊的Controller、Model、View都放入各自的模塊內(nèi)。而且從上圖中可以看出:區(qū)域的功能就類似于一個(gè)小的MVC項(xiàng)目,雖然項(xiàng)目小,但是有自己的控制器、模型、視圖和路由設(shè)置。

區(qū)域?qū)嶋H上就是應(yīng)用程序內(nèi)部的一個(gè)MVC結(jié)構(gòu),一個(gè)應(yīng)用程序可能包含若干個(gè)MVC結(jié)構(gòu)(區(qū)域)。例如:一個(gè)大型的電子商務(wù)網(wǎng)站可能分為若干個(gè)區(qū)域,這些區(qū)域分別代表產(chǎn)品,用戶等模塊,每個(gè)區(qū)域表示應(yīng)用程序的一個(gè)獨(dú)立功能。

二、示例程序

上面講解了區(qū)域路由的概念及結(jié)構(gòu),下面從頭開始創(chuàng)建一個(gè)區(qū)域路由來演示如何創(chuàng)建區(qū)域路由。

1、新建區(qū)域路由

在項(xiàng)目上右鍵添加,然后選擇區(qū)域,如圖所示:

然后輸入?yún)^(qū)域名稱:AreaAdmin,如下圖所示:

點(diǎn)擊確定,然后區(qū)域創(chuàng)建完成:

2、注冊(cè)區(qū)域路由

2.1、區(qū)域路由文件

在MVC中添加一個(gè)區(qū)域以后,會(huì)默認(rèn)幫我們注冊(cè)這個(gè)區(qū)域的路由規(guī)則。例如:我們剛才創(chuàng)建的AreaAdmin區(qū)域,然后幫我們生成了AreaAdminAreaRegistration.cs文件,其代碼如下:

using System.Web.Mvc;

namespace MVCStudyDemo.Areas.AreaAdmin
{
    public class AreaAdminAreaRegistration : AreaRegistration 
    {
        public override string AreaName 
        {
            get 
            {
                return "AreaAdmin";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context) 
        {
            context.MapRoute(
                "AreaAdmin_default",
                "AreaAdmin/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}

上面的代碼中,RegisterArea是實(shí)現(xiàn)注冊(cè)路由的方法,通過把一個(gè)路由添加到區(qū)域路由集合中實(shí)現(xiàn)。

2.2、全局注冊(cè)區(qū)域路由

上面的文件只是把路由添加到了區(qū)域路由集合中,要想使用區(qū)域路由,還需要進(jìn)行全局注冊(cè)區(qū)域路由,全局注冊(cè)區(qū)域路由需要在Global.asax中注冊(cè),代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace MVCStudyDemo
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            // 注冊(cè)全局區(qū)域路由
            AreaRegistration.RegisterAllAreas();
            // 注冊(cè)Filter
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            // 注冊(cè)路由
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}

注意:AreaRegistration.RegisterAllAreas()在RouteConfig.RegisterRoutes(RouteTable.Routes)的前面,這一點(diǎn)很關(guān)鍵,最好是不要改變這個(gè)順序。MVC路由系統(tǒng)是按照注冊(cè)路由的先后順序來匹配的,這里AreaRegistration.RegisterAllAreas()在前面表示MVC路由系統(tǒng)會(huì)先去匹配Area中的路由規(guī)則,如果改變了這個(gè)順序可能會(huì)找到錯(cuò)誤的Controller。

三、測(cè)試區(qū)域路由

新建一個(gè)名為AdminHome的Controller和View,創(chuàng)建方式和使用普通MVC創(chuàng)建Controller和View一樣,修改Index對(duì)應(yīng)的View視圖代碼如下:

@{
    ViewBag.Title = "Index";
}
<h2>這是AreaAdmin區(qū)域路由HomeController控制器里面的Index視圖頁面</h2>

瀏覽器運(yùn)行效果如下:

這時(shí)在新建一個(gè)HomeController,對(duì)應(yīng)的Index視圖代碼如下

@{
    ViewBag.Title = "Index";
}
<h2>這是AreaAdmin區(qū)域路由HomeController控制器里面的Index視圖頁面</h2>

瀏覽器運(yùn)行效果如下:

這時(shí)在訪問一下新建MVC項(xiàng)目時(shí)自帶的HomeController控制器的Index頁面,瀏覽器運(yùn)行效果如下:

從上面的截圖中可以看出這時(shí)候在訪問就出錯(cuò)了,因?yàn)槌绦蛑写嬖趦蓚€(gè)HomeController,程序不知道要訪問哪個(gè)控制器,所以根據(jù)錯(cuò)誤提示需要在區(qū)域路由里面添加namespace,區(qū)分一下兩個(gè)HomeController,區(qū)域路由中查看MapRoute的定義:

上面的代碼中可以看出:在MapRoute的重載函數(shù)中增加一個(gè)namespace即可區(qū)分不同的路由,修改RouteConfig后的路由規(guī)則如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MVCStudyDemo
{
    /// <summary>
    /// 路由:將URL地址匹配到相應(yīng)Controller的Action方法
    /// </summary>
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            // 忽略路由 正則表達(dá)式 表示以.axd結(jié)尾的URL地址被忽略掉
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            // 默認(rèn)路由  一般不擴(kuò)展路由,使用默認(rèn)路由即可
            // 這里使用的是命名參數(shù)的形式 把name,url,default去掉也可以
            routes.MapRoute(
                // 路由名稱
                name: "Default",
                // 匹配規(guī)則(正則表達(dá)式)
                url: "{controller}/{action}/{id}",
                // 默認(rèn)值   默認(rèn)controller是Home action方法是Index id是可空的
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }  ,
                 // 添加命名空間
                 new string[] { "MVCStudyDemo" + ".Controllers" }
            );
        }
    }
}

這時(shí)在訪問HomeController下面的Index方法就可以正常訪問了:

到此這篇關(guān)于ASP.NET MVC實(shí)現(xiàn)區(qū)域路由的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

五大连池市| 永新县| 蓝田县| 九寨沟县| 神池县| 广昌县| 丰顺县| 乐都县| 新巴尔虎左旗| 渝中区| 高唐县| 宣城市| 灌云县| 永新县| 石家庄市| 开鲁县| 汉阴县| 环江| 福贡县| 营山县| 通河县| 子洲县| 鱼台县| 云林县| 鹤壁市| 吉木萨尔县| 尉氏县| 同德县| 河曲县| 林州市| 美姑县| 南皮县| 镇远县| 霍城县| 于都县| 吴堡县| 乡宁县| 明溪县| 乌兰县| 开原市| 泰和县|