使用asp.net mvc里面的area让网站更有条理

news/2024/5/20 5:11:27/文章来源:https://blog.csdn.net/linybo/article/details/50352340

没有Areas前相同问题的处理

 

mvc1.0时代,如果要将网站按目录结构来区分。例如

 

Website/Index

Admin/ Index

User/ Index

……/……

 

通常都是在Views下面建立若干个和Controller相对应的目录,然后在里面放置aspx页面

 

Views\Website\Index

Views\Admin\Index

Views\User\Index

Views\.......\.......

 

这样建立若干个目录

 

其实这样也没什么不好,唯一不好的可能就是随着业务的需要,结构需求会越来越多,views目录下面的文件夹越来越多,更或者你需要更细结构的页面路径,例如:

 

Website/Product/Index

Website/Catalog/Index

Website/Contect/Index

 

当然,你可以用UrlRouteing或者ViewEngine搞定这些问题。但是毫无疑问,随着网站的运行日久,同一个Controller目录下的文件会越来越多,对于同一个Controller下的ActionResult的命名和UrlRouting里面的维护带来不小的麻烦。给管理带来不方便【个人理解】。

 

现在出Areas之后,这个问题有所缓解。还是如上的Url

 

Website\Product\Index

Website\Catalog\Index

Website\Order\Index

Website\Contact\Index

 

可以使用mvc2.0新增的Area来解决这个问题

 

建立项目

首先,用mvc2建立一个新项目,在网站根目录下建立Areas文件夹,在Areas文件夹建立你要区分的目录,例如本例的Website,然后继续在Website目录下增加Views目录,继续在views目录下增加需要分类管理Controller目录和建立aspx文件。使文件结构形成

 

Areas\Website\Views\Product

Areas\Website\Views\ Catalog

Areas\Website\Views\ Order

Areas\Website\Views\ Contact

 

 

 

到原有默认的views目录将web.config复制到现在的新的views目录,你甚至现在可以把原有的views目录删除掉

 

建立Areas区域UrlRouting

 随便找个地方,建立一个新的类,继承AreaRegistration实现抽象类


namespace Valor.Asmyna.Areas.Website

{

    
/// <summary>

    
/// WebsiteArea

    
/// </summary>


    
public class WebsiteArea : AreaRegistration

    
{

        
public override string AreaName

        
{

            
get return "Website"; }

        }


 

        
public override void RegisterArea(AreaRegistrationContext context)

        
{

            context.MapRoute(

                
"Website_Default",

                
"Website/{controller}/{action}/{id}",                           // URL with parameters

                
new { controller = "Home", action = "Index", id = "" }

                );

        }


    }


 

}

 

修改Global.sas
复制代码
         protected   void  Application_Start()

        {

            AreaRegistration.RegisterAllAreas();
// 注册区域Url规则,注意先后顺序

            RegisterRoutes(RouteTable.Routes);

        }
复制代码

 

 

为区域页面建立Controller类

为区域页面建立Controller类没什么区别,可以建立在另外一个外部类库项目上,唯一需要注意的就是命名空间需要和注册Area规则的类的命名空间的前导一致。我们知道,在不使用Areas的时候Controller是不受namespace约束的。也就是说只要你有一个Controller名,而不管他在哪个命名空间下都是可以起作用的,如果我们在不同的命名空间建立2个相同的Controller类名,编译的时候不会出错,但是运行mvc网站的时候会提示存在2个相同的Controller类,系统不知道使用哪个。但是Areas却有所限制,他一定要命名空间的前导和AreaRegistration类得命名空间相同。例如:我建立的AreaRegistration网站项目命名空间为Valor.Asmyna.Areas.Website然后我将Controller分开作为一个独立的类库,如果我随便写一个命名空间空间,这个Controller对于Area里面的views是不起作用的,但是他却对原始Views目录的Controller起作用,只有将他的命名空间设置成Valor.Asmyna.Areas.Website.xxx.xxx的前导才起作用


namespace Valor.Asmyna.Areas.Website

{

    
public class HomeController : Controller

    {

        
public ActionResult Index()

        {

            ViewData[
"title"= "Website/Home/Index";

            
return View();

        }

 

    }

    
public class ProductController : Controller

    {

        
public ActionResult Index()

        {

            ViewData[
"title"= "Website/Product/Index";

            
return View();

        }

 

    }

    
public class ContentController : Controller

    {

        
public ActionResult Index()

        {

            ViewData[
"title"= "Website/Content/Index";

            
return View();

        }

 

    }

}

Ok,到浏览器测试一下看看

 

Area结构完全一致会出现的问题

我们继续在Area目录下增加一个Home目录,在他的Veiws目录下也增加三个相同的controller目录

 

 

直接在刚才注册Website AreaRegistration命名空间为他注册一个Area规则,用默认系默认的ControllerHome.


2个路径进行访问:

/Website/Product

/Home/Product

这个时候controller对于这2area目录的views都能起作用。在页面打印得到的结果一致

 


显然这样是不对的.由此我们刚才想到AreaController的选择名命名空间限制问题。那我们他们分开来注册看看。修改Home区域的AreaRegistration的命名空间和在为HomeArea建立一个Controller类,使他们的命名空间一致。这次我们用Valor.Asmyna.Areas.Website


namespace Valor.Asmyna.Areas.Home

{

    
public class HomeController : Controller

    {

        
public ActionResult Index()

        {

            ViewData[
"title"= "Home/Content/Index";

            
return View();

        }

 

    }

    
public class ProductController : Controller

    {

        
public ActionResult Index()

        {

            ViewData[
"title"= "Home/Content/Index";

            
return View();

        }

 

    }

    
public class ContentController : Controller

    {

        
public ActionResult Index()

        {

            ViewData[
"title"= "Home/Content/Index";

            
return View();

        }

 

    }

}

 

namespace Valor.Asmyna.Areas.Home

{

    
public class HomeController : Controller

    {

        
public ActionResult Index()

        {

            ViewData[
"title"= "Home/Home/Index";

            
return View();

        }

 

    }

    
public class ProductController : Controller

    {

        
public ActionResult Index()

        {

            ViewData[
"title"= "Home/Product/Index";

            
return View();

        }

 

    }

    
public class ContentController : Controller

    {

        
public ActionResult Index()

        {

            ViewData[
"title"= "Home/Content/Index";

            
return View();

        }

 

    }

}

 

编译之后访问,各自分别为自己的Controller处理了

Home/Product

 

Website/Product

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_895304.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IIS日志-网站运维的好帮手

阅读目录 开始IIS日志包含了哪些信息IIS日志的配置如何分析IIS日志推荐的IIS日志分析方法IIS日志中的异常记录再谈 scwin32status64寻找性能问题寻找可改进的目标程序架构对IIS日志分析过程的影响 对于一个需要长期维护的网站来说&#xff0c;如何让网站长久稳定运行是件很有意…

Fiddler是最强大最好用的Web调试工具之一--网站抓包分析

Fiddler 教程 Fiddler是最强大最好用的Web调试工具之一&#xff0c;它能记录所有客户端和服务器的http和https请求&#xff0c;允许你监视&#xff0c;设置断点&#xff0c;甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说&#xff0c;都有很大的帮助。 阅读目录 Fid…

8个免费高清无版权图片网站--设计必备

冰点推&#xff1a;虽然设计师经常和图片打交道&#xff0c;但是我们平时的生活和工作也离不开图片&#xff0c;经常会碰到好看的图片却不知去哪下载&#xff0c;即使在网上下载下来了&#xff0c;图片也有可能是模糊不堪的&#xff0c;对于设计师来说&#xff0c;很多网上下载…

如何使用Magento搭建电子商务网站?

提示&#xff1a;本文转载自阿里云产品文档&#xff1a;在Linux实例上搭建Magento电子商务网站&#xff08;CentOS 7&#xff09; 购买云服务就上阿里云【助力企业上云】性能级主机低至2-5折、 【全民云计算】云主机低至2折 【商标注册服务】低至300元 【阿里云自营建站】买一年…

从LiveJournal后台发展看大规模网站性能优化方法

一、LiveJournal发展历程 LiveJournal 是99年始于校园中的项目&#xff0c;几个人出于爱好做了这样一个应用&#xff0c;以实现以下功能&#xff1a; 博客&#xff0c;论坛社会性网络&#xff0c;找到朋友聚合&#xff0c;把朋友的文章聚合在一起 LiveJournal采用了大量的开…

CSDN网站联合CMP在国内成功举办技术盛会

2007年11月29日&#xff0c;“2007 软件开发2.0技术大会”&#xff08;SD2C&#xff09;在九华山庄揭开帷幕&#xff0c;来自国内外的技术专家和技术学习爱好者近1000人&#xff0c;参加了上午的开幕式演讲。本次大会是由中国著名IT技术社区CSDN联合美国权威IT技术媒体CMP集团&…

文件读写与网站密码破解

认识一下repr str是转化成人能看懂得符号&#xff0c;repr是转成机器能看懂的符号 mystrstr(1.34) print(type(mystr)) #字符串类型 print(str(1)"1") #str()转化为字符串 x str("12.5") #repr打印的时候是计算机看懂,str人可以看懂 print(type(x)) pr…

php网站(程序)运行原理图:

根据域名查找服务器&#xff08;IP&#xff09;的逻辑流程&#xff1a; 1&#xff0c;浏览器中发出请求——其中一定带了域名&#xff08;服务器名&#xff09;信息&#xff1b; 2&#xff0c;浏览器首先去本机操作系统的hosts文件中找是否有该域名对应的IP地址&#xff1b; 2.…

快速搭建个人网站

网站搭建流程 1.注册域名 官网&#xff1a;阿里云域名注册 step1 登录阿里云账户&#xff0c;搜索想购买的域名 step2 选择想要购买的域名完成付款 step3 进入阿里云域名控制台&#xff0c;查看已购买域名信息&#xff0c;如果域名状态未实名进行实名认证 2.购买云服务器 …

中外B2B网站

中外B2B网站 2008/06/14 17:41 [ 未分类 ] <!-- url:share/Share.js?objshareBlogFromCoolPoint--><!-- {"title":"添加博客《中外B2B网站》到我的分享", "queryString":"tid1&src401403109&oid1304900059"} --&g…

开源GIS-第一篇:搭建简易Web GIS网站:使用GeoServer+PostgreSQL+PostGIS+OpenLayers3

1 服务器搭建 在http://geoserver.org/下载zip&#xff0c;解压缩&#xff0c;在解压路径下的bin文件夹里双击startup.bat&#xff0c;出现命令簿&#xff08;不可关闭&#xff09;。 在浏览器中输入http://localhost:8080&#xff0c;出现下图。这时可以设置GeoServer的管理…

win8 iis安装及网站发布

原文地址&#xff1a;http://www.cnblogs.com/Joans/archive/2012/07/16/2593828.html 系统&#xff1a;win8 环境&#xff1a;vs2012 一&#xff1a;安装IIS 比较win7的安装来说&#xff0c;多选了几个钩钩&#xff0c;不然会报错&#xff0c;偶就遇到这样的错误。 控制面…