MVC2 Area實現網站多級目錄

2024-02-29 02:48

本文主要是介绍MVC2 Area實現網站多級目錄,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Areas是ASP.NET Mvc 2.0版本中引入的众多新特性之一,它可以帮你把一个较大型的Web项目分成若干组成部分,即Area。实现Area的功能可以有两个组织形式:

  1. 在1个ASP.NET Mvc 2.0 Project中创建Areas。
  2. 创建多个ASP.NET Mvc 2.0 Project,每个Project就是一个Area。

第2种结构比较复杂,但第1种结构同样可以做到每个Area之间的并行开发,互不影响,所以不推荐第2种方法。

 

以ASP.NET Mvc 2.0的默认模板为例:

1. 首先要新建一个ASP.NET Mvc 2.0的Project,在Project上点击鼠标右键选择Add->Area,在打开的窗口中输入Area的名子(例如:Profile),点击Add按钮,然后将看到下面的结构。P

名子叫做Profile的Area的结构与根目录下的Controllers,Models和Views的结构是一样的,唯一区别是Profile下面多了一个ProfileAreaRegistration.cs文件。它继承自AreaRegistration类,ProfileAreaRegistration 必须实现AreaRegistration类中的AreaName属性和RegisterArea(AreaRegistrationContext context)方法

using System.Web.Mvc;  
namespace
ASP.NET_Mvc_2_Test.Areas.Profile
{
public class ProfileAreaRegistration : AreaRegistration
{
public override string
AreaName
{
get{return "Profile";}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Profile_default",
"Profile/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional});
}
}
}

AreaName属性用来定义Area的名子, RegisterArea(AreaRegistrationContext context) 方法中可以看出在浏览器的地址栏中URL的样式为Profile/{controller}/{action}/{id},是4级构结,只要将context.MapRoute(…)改为

public override void RegisterArea(AreaRegistrationContext context)         
{
context.MapRoute(
"Profile_default"
,
"Profile/{action}/{id}"
,
new
{ controller = "要访问的controller名子", action = "Index", id = UrlParameter.Optional });
}

URL的样式会再变为三级结构 Profile/{action}/{id}。

 

2. 修改根目录下Views/shared/Site.Master文件,并添加一个名为o”Your Profile”的菜单项并指定area的名子, 示例中Area的名子为Profile。  

<ul id="menu">                                   
<
li><%= Html.ActionLink("Home", "Index", "Home", new { area = ""}, null)%></li>
<
li><%= Html.ActionLink("Your Profile", "ViewProfile", "Profile", new { area = "Profile" }, null)%></li>
<
li><%= Html.ActionLink("About", "About", "Home", new { area = ""}, null)%></li>
</
ul>

注意:Home和About不属于任何Area,但是也要通过匿名对象的方式声明area,如果没有声明Area,当进入到 Profile的某个view时, Home和About的会的URL会变为Profile/Home, Profile/About,点击Home或About时会有异常抛出,所以当页面上的某个链接不属于任何一个Area并且有可能被多个Area可享的 话,一定要加上new { area = ""}

3. 只有匹配正确的Route才能显示Area中的View,Area中的Route已经配置好,但它是如何被加入到RouteTable中的?




项目分为三个首页 

如:  /Home/Index 前台首页

         /Admin/Home/Index 后台首页

         /OA/Home/Index 办公平台首页

新建一个asp.net MVC3 示例项目: 右键 →添加→Area

prj

直接运行项目:加载中...

原因是存在同名的多个Controller,需要配置默认的命名空间。解决方法:

打开Global.asax.cs

public static void RegisterRoutes(RouteCollection routes)
{
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

     routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional },// Parameter defaults
        new[] { "Web.Controllers" }// Namespaces 引入默认的命名空间
        );

}

http://localhost:49849/ 运行后输出  Home/Index

http://localhost:49849/Admin/Home/Index 运行后输出  Admin/Home/Index

http://localhost:49849/OA/Home/Index 运行后输出 OA/Home/Index

更改路径:

http://localhost:49849/Admin/ www.2cto.com后报404错误

原因是 Area下面的Admin没有配置默认的 Controller造成的,解决方法:

打开 Area下Admin下 AdminAreaRegistration.cs

new { controller = "Home", action = "Index", id = UrlParameter.Optional }

加上默认的Controller即可。

在此抛砖引玉了。

这篇关于MVC2 Area實現網站多級目錄的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/757362

相关文章

[LeetCode] 695. Max Area of Island

题:https://leetcode.com/problems/max-area-of-island/description/ 题目 Given a non-empty 2D array grid of 0’s and 1’s, an island is a group of 1’s (representing land) connected 4-directionally (horizont

怎麼實現代理IP爬蟲-okeyproxy

代理IP的使用是網路數據採集領域一個非常重要的技巧,代理IP通過代理伺服器中轉網路請求,使得目標伺服器認為請求來自代理伺服器的IP地址,而不是實際的客戶端IP地址。這樣可以隱藏真實的IP,分散請求壓力,避免被目標網站封禁。本文將詳細介紹代理IP爬蟲的原理、實現方法及注意事項。 代理IP爬蟲的實現 下麵我們以Python為例,介紹如何實現一個簡單的代理IP爬蟲。 import requests

监控flash_recovery_area的使用情况(V$FLASH_RECOVERY_AREA_USAGE,V$RECOVERY_FILE_DEST)

--监控flash_recovery_area的使用情况(V$FLASH_RECOVERY_AREA_USAGE,V$RECOVERY_FILE_DEST)SYS@PROD1> select * from V$FLASH_RECOVERY_AREA_USAGE;FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF

Area of Polycubes(简单模拟)

http://poj.org/problem?id=3792 题意:给出n个立方体的三维坐标,在每个立方体与之前的立方体有公共边的前提下输出他们的表面积,否则输出NO,并输出不合法的立方体编号。 注意有重的立方体,也输出NO。 #include <stdio.h>#include <string.h>#include <algorithm>#include <cmath

innovus:report_area和reportGateCount报告module面积的差异

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 相关文章链接:

The area

万恶的高数微分不会啊!!眼馋队友用微分刷刷的做出来的同时,只能用悲催的二分法终于二出来了。。。 Description Ignatius bought a land last week, but he didn't know the area of the land because the land is enclosed by a parabola and a straight li

POJ 2375 Cow Ski Area (强连通分量)

题目地址:POJ 2375 对每个点向与之相邻并h小于该点的点加有向边。然后强连通缩点。问题就转化成了最少加几条边使得图为强连通图,取入度为0和出度为0的点数的较大者即可。注意,当强连通分量只有一个的时候,答案是0,而不是1. 代码如下: #include <iostream>#include <string.h>#include <math.h>#include <queue>

Leetcode 3195. Find the Minimum Area to Cover All Ones I

Leetcode 3195. Find the Minimum Area to Cover All Ones I 1. 解题思路2. 代码实现 题目链接:3195. Find the Minimum Area to Cover All Ones I 1. 解题思路 这一题还是挺简单的,只要找到所有1所在的元素的上下左右4个边界,作为目标矩形的四个边即可。 2. 代码实现 给出python

数据库设计之area区域表

这个用起来还可以的比较全,是2015年更新的 在这个版本的数据上我做了个小的改动,如果你使用不方便可以参考改版后的数据:http://blog.csdn.net/u012012240/article/details/51314647 -- phpMyAdmin SQL Dump-- http://www.phpmyadmin.net---- 主机: localhost-- 生成日期:

IIS配置網站登錄驗證,禁止匿名登陸

需要維護一個以前的舊系統,這個系統在內網運行,需要抓取電腦的登陸賬號,作為權限管理的一部分因此需要在IIS配置一下