ASP.NET没有魔法——ASP.NET MVC使用Area开发一个管理模块
之前的My Blog提供了列表的展示和文章显示功能,但是所有数据仍然只能通过数据库录入,为了完成最初的角色“作者”的用例,本章将介绍如何使用“Area”实现My Blog的管理功能。
根据功能分离代码
根据功能分离代码即所谓的模块,由于在My Blog中已经存在博客查看功能,而管理功能与查看功能是有区别的,所以在开发时也应考虑将它们的代码进行区分,以便于阅读和管理。而区分代码最常用的就是通过子目录将它们区分,如下:

在Controllers、Models和Views目录下创建Admin子目录,但在ASP.NET MVC中提供了一个更容易切分功能的方法“Area”。
使用Area分离功能
1. 添加一个Admin Area:
在My Blog项目的右键菜单中找到Add--->Area:

Area名称设置为Admin:

完成后将生成一下目录和文件:

比较特殊的文件是AdminAreaRegistration.cs文件,该文件包含了该Area的路由信息,关于路由后续介绍:

创建管理模块主页
1. 仓储中添加增、删、改功能:

2. 业务逻辑添加增、删、改功能:

3. 添加页面布局文件(为了快速开发复制一份原有布局文件进行修改):

4. 添加管理主页相关的HomeController、View:

Index.cshtml内容:

_Layout.cshtml:

_ViewStart.cshtml:

5. 为Admin Area路由添加命名空间(因为原来就有一个名为HomeController的控制器,用于显示主页)
对App_Start的RoutConfig.cs和Areas下面的AdminAreaRegistration.cs进行修改,注册路由的时候加入命名空间:


添加文章管理功能
1. 添加PostManagement的Controller、View、Model

管理文章列表代码:

更新文章代码:

列表页面:

更新文章页面:

视图模型:

代码说明:
1. 为什么Controller中有两个Update方法?
因为完成文章更新有两个步骤,第一个步骤是根据ID向服务器请求文章数据,所以参数为id的update方法用于请求数据;第二个步骤是将修改后的数据提交到服务器,所以参数为PostMaintainViewModel类型的方法用于处理由浏览器提交的文章数据并保存。
一般来说获取数据有HTTP的Get方法,提交数据使用Post方法,在ASP.NET MVC中的action默认使用Get,如果需要使用其它方法可以用特性来标记,如代码中的[HttpPost]。
而两个方法同名是为了表现出更新方法两个
2. 页面代码中使用Html.BeginForm方法来生成一个form,HTML中的form用于向服务器提交form内的数据,ASP.NET MVC中可以使用这个方法来生成一个form。
3. 已经有PostViewModel问什么还要创建类似的PostMaintainViewModel?因为虽然内容相似甚至相同,但是毕竟功能不一样,如果使用同一个ViewModel,那么当需要对其中一个功能进行拓展时会影响另一个功能。
运行效果:



小结
本章通过创建area的方法为My Blog提供了文章维护的功能,并介绍了主要代码,现在My Blog已经具备内容展示和维护的功能,但是所有功能都是不完善的,比如界面、文章更新时候的排版还有访问限制等,这些功能也将在后续慢慢完善。在使用Area开发新的功能模块时需要注意的就是Controller的重名问题,如果存在重名需要在路由信息中加入命名空间的限制。
本文连接:http://www.cnblogs.com/selimsong/p/7659997.html
ASP.NET没有魔法——ASP.NET MVC使用Area开发一个管理模块的更多相关文章
- ASP.NET没有魔法——ASP.NET 身份验证与Identity
前面的文章中为My Blog加入了文章的管理功能(ASP.NET没有魔法——ASP.NET MVC使用Area开发一个管理模块),但是管理功能应该只能由“作者”来访问,那么要如何控制用户的访问权限?也 ...
- ASP.NET没有魔法——ASP.NET MVC 与数据库大集合
ASP.NET没有魔法——ASP.NET与数据库 ASP.NET没有魔法——ASP.NET MVC 与数据库之MySQL ASP.NET没有魔法——ASP.NET MVC 与数据库之ORM ASP.N ...
- ASP.NET没有魔法——ASP.NET MVC 路由的匹配与处理
ASP.NET MVC的路由是MVC应用的一个核心也是MVC应用处理的入口,作为一个开发者,在正常情况下仅仅需要做的就是根据需求去定义实体.业务逻辑,然后在MVC的Controller中去调用.Vie ...
- ASP.NET没有魔法——ASP.NET MVC IoC
之前的文章介绍了MVC如何通过ControllerFactory及ControllerActivator创建Controller,而Controller又是如何通过ControllerBase这个模板 ...
- ASP.NET没有魔法——ASP.NET MVC 过滤器(Filter)
上一篇文章介绍了使用Authorize特性实现了ASP.NET MVC中针对Controller或者Action的授权功能,实际上这个特性是MVC功能的一部分,被称为过滤器(Filter),它是一种面 ...
- ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证
随着软件的不断发展,出现了更多的身份验证使用场景,除了典型的服务器与客户端之间的身份验证外还有,如服务与服务之间的(如微服务架构).服务器与多种客户端的(如PC.移动.Web等),甚至还有需要以服务的 ...
- ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(下篇)
上一篇<ASP.NET没有魔法——ASP.NET MVC 模型绑定解析(上篇)>文章介绍了ASP.NET MVC模型绑定的相关组件和概念,本章将介绍Controller在执行时是如何通过这 ...
- ASP.NET没有魔法——ASP.NET MVC Razor与View渲染
对于Web应用来说,它的界面是由浏览器根据HTML代码及其引用的相关资源进行渲染后展示给用户的结果,换句话说Web应用的界面呈现工作是由浏览器完成的,Web应用的原理是通过Http协议从服务器上获取到 ...
- ASP.NET没有魔法——ASP.NET MVC Razor与View渲染 ASP.NET没有魔法——ASP.NET MVC界面美化及使用Bundle完成静态资源管理
ASP.NET没有魔法——ASP.NET MVC Razor与View渲染 对于Web应用来说,它的界面是由浏览器根据HTML代码及其引用的相关资源进行渲染后展示给用户的结果,换句话说Web应用的 ...
随机推荐
- 201521123121 《Java程序设计》第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 进程:每个进程都有独立的代码和数据空间,进程间的切换会有较大的开销,一个进程包含1--n个线程. 线程:同一 ...
- 201521123090《Java程序设计》第12周学习总结
本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 书面作业 将Student对象(属性:int id, String name,int age,double grad ...
- Extjs2.0 desktop 动态创建桌面图标和开始菜单
这几天一直纠结Extjs desktop怎么动态读取数据,用Ext.net已经实现但是不灵活.Ext.net做出来的桌面在窗口关闭后只是隐藏该窗口,并没有释放,对于我这种js菜鸟来说,改那一坨代码要人 ...
- WebSocket In ASP.NET Core(二)
WebSocket In ASP.NET Core(二) Server in ASP.NET-Core DI in ASP.NET-Core Routing in ASP.NET-Core Error ...
- 关于ios::sync_with_stdio(false)
作用就是取消同步,这样的话使用cin就和使用scanf效率相似. 但是今天在做题的时候碰到一点小问题,就是在关闭同步的时候使用scanf是交了一发代码,然后RE了(经检查scanf没有写错),而把关同 ...
- C++11获取线程的返回值
C++11 std::future and std::promise 在许多时候,我们会有这样的需求--即我们想要得到线程返回的值. 但是在C++11 多线程中我们注意到,std::thread对象会 ...
- iOS Storyboard约束详解
链接:http://www.jianshu.com/p/b88c65ffc3eb 约束,就是指--此处略去1万字--都懂的,就不说了.直接进入实战环节. 本文的控件约束都是围绕着UITableView ...
- uvalive 7500 Boxes and Balls
https://vjudge.net/problem/UVALive-7500 题意: 找到规律之后发现给出一个数n,要求找到1 + 2i + ... + x <= n,找出1到x的和. 思路: ...
- JAVA 局部变量表
1. 除了 long,double 占用两个slot 之外,其他类型均占用一个slot. 2.在内容相同的情况下, 实例方法(不加 static) 会比 类方法 (static)对占用一个局部变量位置 ...
- C#设计模式之五创建者模式(Builder)【创建型】
一.引言 今天我们要讲讲Builder模式,也就是建造者模式,当然也有叫生成器模式的.在现实生活中,我们经常会遇到一些构成比较复杂的物品,比如:电脑,它就是一个复杂的物品,它主要是由CPU.主板.硬 ...