mvc模式与三大框架mvc和三层的区别别?????

君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
详细讲解Java三大框架SSH与MVC的设计模式.doc
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口mvc和三大框架有什么区别
[问题点数:40分]
mvc和三大框架有什么区别
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。刚学完mvc和servlet和jsp应该接下来学习java三大框架吗?学习三大框架应该先学哪个?
[问题点数:40分,结帖人a]
刚学完mvc和servlet和jsp应该接下来学习java三大框架吗?学习三大框架应该先学哪个?
[问题点数:40分,结帖人a]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
本帖子已过去太久远了,不再提供回复功能。22605人阅读
&&&&&&&& 首先我们要知道Hibernate五大对象:,本实例通过深入的使用这五大对象和spring+springMVC相互结合,体会到框架的好处,提高我们的开发效率
&&&&&&&& Hibernate有五大核心接口,分别是:Session
Transaction Query SessionFactoryConfiguration 。这五个接口构成了Hibernate运行的基本要素,可以执行存取,持久化,事务管理等操作。这五个接口可以位于系统的业务逻辑层和持久化层。下面是一张Hibernate的关系图:
Session接口:
&&&&&& Session接口 Session 接口对于Hibernate 开发人员来说是一个最重要的接口。然而在Hibernate中,实例化的Session是一个轻量级的类,创建和销毁它都不会占用很多资源。这在实际项目中确实很重要,因为在客户程序中,可能会不断地创建以及销毁Session对象,如果Session
的开销太大,会给系统带来不良影响。但是Session对象是非线程安全的,因此在你的设计中,最好是一个线程只创建一个Session对象。 session可以看作介于数据连接与事务管理一种中间接口。我们可以将session想象成一个持久对象的缓冲区,Hibernate能检测到这些持久对象的改变,并及时刷新数据库。我们有时也称Session是一个持久层管理器,因为它包含这一些持久层相关的操作,
诸如存储持久对象至数据库,以及从数据库从获得它们。需要注意的是,Hibernate的session不同于JSP 应用中的HttpSession。当我们使用session这个术语时,我们指的Hibernate 中的session,而我们以后会将HttpSesion 对象称为用户session。
SessionFactory接口:
&&&&&& SessionFactroy接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。需要注意的是SessionFactory并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。
Transaction接口
&&&&&&& Transaction接口负责事务相关的操作,一般在Hibernate的增删改中出现,但是使用Hibernate的人一般使用Spring去管理事务。
Query负责执行各种数据库查询。它可以使用HQL语言或SQL语句两种表达方式。它的返回值一般是List。需要自己转换。
Configuration接口:
&&&&&& Configuration对象用于配置并根启动Hibernate。Hibernate应用通过Configuration实例来指定对象—关系映射文件的位置或者动态配置Hibernate的属性,然后创建SessionFactory实例。我们可以查看Configuration的源代码,它的configure()方法是这样实现的:
了解了这五大对象之后,,以上博客我们配置好了spring+springMVC的环境,现在我们继续集成hibernate的相关配置,框架图如下:
第一步:引入相关的包
&&&&&&&&&&& (对于每个包,我们要有意识的去了解其功能,这样今后的时候项目中报错之后我们也可以及时知道错误出在哪里?)
第二:&& 继续配置hibernatexml文件( springAnnotation-hibernate.xml)
&span style=&font-size:18&&&span style=&font-size:18&&&span style=&font-size:18&&&?xml version=&1.0& encoding=&UTF-8&?&
&!DOCTYPE beans PUBLIC &-//SPRING//DTD BEAN 2.0//EN& &http://www.springframework.org/dtd/spring-beans-2.0.dtd& [
&!ENTITY contextInclude SYSTEM &org/springframework/web/context/WEB-INF/contextInclude.xml&&
&!-- 配置hibernate相关数据库的操作 --&
&bean id=&dataSource& class=&org.springframework.jdbc.datasource.DriverManagerDataSource&&
&!-- 数据库的驱动 --&
&property name=&driverClassName& value=&oracle.jdbc.driver.OracleDriver&/&
&!-- 数据库的Id,用户名与密码 --&
&property name=&url& value=&jdbc:oracle:thin:@192.168.24.248:1521:ORCL&/&
&property name=&username& value=&lishehe&/&
&property name=&password& value=&lishehe&/&
&bean id=&sessionFactory& class=&org.springframework.orm.hibernate4.LocalSessionFactoryBean&&
&property name=&dataSource& ref=&dataSource&/&
&property name=&hibernateProperties&&
&!-- 配置不同数据库的方言 --&
&prop key=&hibernate.dialect&&org.hibernate.dialect.Oracle10gDialect&/prop&
&!-- 其实这个参数的作用主要用于:自动创建|更新|验证数据库表结构。如果不是此方面的需求建议set value=&none&.
其它几个参数的意思,我解释一下:
加载hibernate时,验证创建数据库表结构
每次加载hibernate,重新创建数据库表结构,这就是导致数据库表数据丢失的原因。
create-drop
加载hibernate时创建,退出是删除表结构
加载hibernate自动更新数据库结构 --&
&prop key=&hibernate.hbm2ddl.auto&&update&/prop&
&!-- 是否显示sql语句 --&
&prop key=&hibernate.show_sql&&true&/prop&
&prop key=&hiberante.format_sql&&true&/prop&
&/property&
&property name=&configLocations&&
&!-- 读取和实体相关的xml --&
classpath*:com/tgb/web/controller/hibernate/hibernate.cfg.test.xml
&/property&
&!-- 定义事务管理器(声明式的事务) --&
&bean id=&transactionManager& class=&org.springframework.orm.hibernate4.HibernateTransactionManager&&
&property name=&sessionFactory& ref=&sessionFactory&&&/property&
&bean id=&transactionBese& class=&org.springframework.transaction.interceptor.TransactionProxyFactoryBean& lazy-init=&true& abstract=&true&&
&!-- 配置事务管理器 --&
&property name=&transactionManager& ref=&transactionManager&&&/property&
&!-- 配置事务管理器 --&
&property name=&transactionAttributes&&
&!-- 下面就开始配置各个模块所必须的部分,在各自的applicationContext-XXX-beans.xml配置的对于事务管理的详细信息。
首先就是配置事务的传播特性,如下: --&
配置事务传播特性 --&
&prop key=&add*&&PROPAGATION_REQUIRED,-Exception&/prop&
&prop key=&update*&&PROPAGATION_REQUIRED,-Exception&/prop&
&prop key=&insert*&&PROPAGATION_REQUIRED,-Exception&/prop&
&prop key=&modify*&&PROPAGATION_REQUIRED,-Exception&/prop&
&prop key=&delete*&&PROPAGATION_REQUIRED,-Exception&/prop&
&prop key=&get*&&PROPAGATION_NEVER&/prop&
&/property&
&/span&&/span&&/span&
第三:&& 新建IUserDAO
&span style=&font-size:18&&&span style=&font-size:18&&package com.tgb.web.controller.
import java.util.L
import com.tgb.web.controller.entity.U
public interface IUserDAO {
public void addUser(User user);
public List&User& getAllUser();
public boolean delUser(String id);
public User getUser(String id);
public boolean updateUser(User user);
&/span&&/span&
&&&&&&&&&&&&&&&&& 实现类UserDAo&span style=&font-size:18&&&span style=&font-size:18&&package com.tgb.web.controller.
import java.util.L
import org.hibernate.Q
import org.hibernate.SessionF
import com.tgb.web.controller.entity.U
public class UserDAO implements IUserDAO
private SessionFactory sessionF
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionF
public void addUser(User user) {//添加用户
sessionFactory.getCurrentSession().save(user);
public List&User& getAllUser() {//查找所有用户信息
String hql = &from User&;
Query query = sessionFactory.getCurrentSession().createQuery(hql);
return query.list();
public boolean delUser(String id) {//删除用户
String hql = &delete User u where u.id=?&;
Query query = sessionFactory.getCurrentSession().createQuery(hql);
query.setString(0, id);
return (query.executeUpdate() & 0);
public User getUser(String id) {//根据id得到单个用户
String hql = &from User u where u.id=?&;
Query query = sessionFactory.getCurrentSession().createQuery(hql);//此时使用的是hql语句
query.setString(0, id);
return (User) query.uniqueResult();
public boolean updateUser(User user) {//修改用户信息,hql语句
String hql = &update User u set u.userName=?,u.age=? where u.id=?&;
Query query = sessionFactory.getCurrentSession().createQuery(hql);
query.setString(0, user.getUserName());
query.setString(1, user.getAge());
query.setString(2, user.getId());
return (query.executeUpdate() & 0);
&/span&&/span&
第四:& 新建实体User&span style=&font-size:18&&&span style=&font-size:18&&package com.tgb.web.controller.
import javax.persistence.C
import javax.persistence.E
import javax.persistence.GeneratedV
import javax.persistence.Id;
import javax.persistence.T
import org.hibernate.annotations.GenericG
@Table(name=&T_USER&)
public class User {
@GeneratedValue(generator = &system-uuid&)
//使用uuid生成主键的方式
@GenericGenerator(name = &system-uuid&, strategy = &uuid&)
@Column(length=32)
@Column(length=32)
private String userN
@Column(length=32)
public String getUserName() {
return userN
public void setUserName(String userName) {
this.userName = userN
public String getAge() {
public void setAge(String age) {
this.age =
public String getId() {
public void setId(String id) {
&/span&&/span&
&&&&&&&&&&&&&&&&& 通常是 hibernate.cfg.xml)中声明持久性类 hibernate.cfg.test.xml&span style=&font-size:18&&&span style=&font-size:18&&&!DOCTYPE hibernate-configuration PUBLIC
&-//Hibernate/Hibernate Configuration DTD 3.0//EN&
&http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd&&
&!-- (通常是 hibernate.cfg.xml)中声明持久性类: --&
&hibernate-configuration&
&session-factory&
&mapping class=&com.tgb.web.controller.entity.User&/&
&/session-factory&
&/hibernate-configuration&&/span&&/span&
第五 : IUserManager
&span style=&font-size:18&&&span style=&font-size:18&&package com.tgb.web.controller.
import java.util.L
import com.tgb.web.controller.entity.U
public interface IUserManager {
public void addUser(User user);
public List&User& getAllUser();
public boolean delUser(String id);
public User getUser(String id);
public boolean updateUser(User user);
&/span&&/span&
&&&&&&&&&&&& UserManager实现类
&span style=&font-size:18&&&span style=&font-size:18&&package com.tgb.web.controller.
import java.util.L
import com.tgb.web.controller.dao.IUserDAO;
import com.tgb.web.controller.entity.U
public class UserManager implements IUserManager {
private IUserDAO userD
public void setUserDao(IUserDAO userDao) {
this.userDao = userD
public void addUser(User user) {
userDao.addUser(user);
public List&User& getAllUser() {
return userDao.getAllUser();
public boolean delUser(String id) {
return userDao.delUser(id);
public User getUser(String id) {
return userDao.getUser(id);
public boolean updateUser(User user) {
return userDao.updateUser(user);
&/span&&/span&
第六&& UserController,控制类
&span style=&font-size:18&&package com.tgb.web.
import java.io.IOE
import java.io.PrintW
import java.util.L
import javax.annotation.R
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpServletR
import org.springframework.stereotype.C
import org.springframework.web.bind.annotation.RequestM
import com.tgb.web.controller.entity.U
import com.tgb.web.controller.service.IUserM
@Controller
@RequestMapping(&/user&)
public class UserController {
@Resource(name=&userManager&)// 获取spring配置文件中bean的id为userManager的,并注入
private IUserManager userM
@RequestMapping(&/toAddUser&)
public String toAddUser(){
return &/addUser&;
@RequestMapping(&/addUser&)// 请求url地址映射,类似Struts的action-mapping
public String addUser(User user){
userManager.addUser(user);
return &redirect:/user/getAllUser&;
@RequestMapping(&/getAllUser&)
public String getAllUser(HttpServletRequest request){
List&User& user = userManager.getAllUser();
request.setAttribute(&user&, user);
return &/userManager&;
@RequestMapping(&/delUser&)
public void delUser(String id,HttpServletResponse response){
String result = &{\&result\&:\&error\&}&;
if(userManager.delUser(id)){
result = &{\&result\&:\&success\&}&;
PrintWriter out =
response.setContentType(&application/json&);
out = response.getWriter();
out.write(result);
} catch (IOException e) {
e.printStackTrace();
@RequestMapping(&/getUser&)
public String getUser(String id,HttpServletRequest request){
User user = userManager.getUser(id);
request.setAttribute(&user&, user);
return &/editUser&;
@RequestMapping(&/updateUser&)
public String updateUser(User user,HttpServletRequest request){
if(userManager.updateUser(user)){
user = userManager.getUser(user.getId());
request.setAttribute(&user&, user);
return &/editUser&;
return &/error&;
第七:前台页面(详细内容不再详列出,源码分享给大家)
&&&&&&&这个过程虽然简单,但是自己操作的过程中还是出现了很多的问题,解决问题,快速成长,进一步验证了一句话:实践是检验真理的唯一标准!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:968310次
积分:20976
积分:20976
排名:第242名
原创:245篇
评论:6306条
阅读:11738
阅读:66211
文章:11篇
阅读:27591
阅读:16159
阅读:22184
阅读:11736
阅读:12793
文章:13篇
阅读:34646
(1)(4)(4)(10)(4)(8)(4)(5)(5)(4)(4)(4)(4)(4)(5)(8)(5)(9)(7)(5)(4)(4)(5)(4)(5)(7)(5)(4)(7)(4)(5)(5)(6)(15)(10)(11)(4)(7)(14)(4)(8)(2)(3)(1)今天,我将开启一个崭新的话题:ASP.NET MVC框架的探讨。首先,我们回顾一下ASP.NET Web Form技术与ASP.NET MVC的异同点,并展示各自在Web领域的优劣点。在讨论之前,我对这两种技术都非常热衷,我个人觉得在实际的项目开发中,两者都能让我们受益匪浅,因此是目前Web领域两大平行和流行的技术。我们都知道,在传统的ASP.NET Web Form应用程序中,Microsoft已为我们设计了较为完整、简洁的开发环境,并提供了复杂的处理引擎,开发者只需简单的拖放控件和编写对应的事件就能实现我们想要的功能。但是,正是因为这些快捷的开发模式,对于开发者而言,却很难了解程序背后HTML的运作机制,而通常情况下HTML与后台程序又交织在一起(尽管比起ASP有较大进步),使得页面设计人员和开发人员的职责融为一体,难以拆解,有时初学者对ASP.NET Web Form的机制不深入了解的话,会导致各种误用,例如ViewState存放大量的数据造成页面阻塞,Session跨服务器负载而丢失等莫名其妙的问题,而难以找到问题的根本点。因此ASP.NET MVC应运而生,将模型、视图与控制器划分到不同的Web应用模块中,使得设计人员与开发人员职责更好的分离,并且不需保存页面视图,不需数据回传,提高了应用程序的可维护性和扩展性,特别是非常容易进行测试驱动开发。
&&&&& 接下来,我们来了解MVC的三大组件(模型、视图、控制器)。所谓模型,就是MVC需要提供的数据源,负责数据的访问和维护。所谓视图,就是用于显示模型中数据的用户界面。所谓控制器,就是用来处理用户的输入,负责改变模型的状态并选择适当的视图来显示模型的数据。以下是我绘制的MVC三大组件之间的交互图。
从交互图中可以看出,MVC从用户发送请求到页面呈现结果大致经历了五个步骤,分别如下:
(1). 用户在浏览器输入地址,向页面发送请求(实则是向控制器发出相关命令);
(2). 控制器接受命令后,向模型请求获得相关的数据;
(3). 模型将相应的数据返回给控制器;
(4). 控制器将相关数据发送到指定的视图;
(5). 指定的视图呈现相关的数据。
从这五个步骤中,我们不难发现啊控制器起着承上启下的中枢作用,职责变得更加明晰,这也就是开发者主要关注的组件了。接下来,我以实际的实例来说明MVC的交互流程,并加以详细的理论支持。我们以Northwind下Categories表为例,一步一步展现类别的增删改查如何在MVC中的实现过程。新建"ASP.NET MVC2空应用程序"之后,会展现如下界面。
从界面中可以看出,Microsoft已约定了一套规范的目录结构,下面我就每一个目录的归纳一下:
Content: 存放CSS、图片等静态资源文件。
Controllers: 存放一系列以***Controllers命名的控制器组件,执行与模型和视图的交互(一般业务会提取到业务逻辑层中)。
Models: 存放Linq to SQL或ADO.NET Data Entity Model等模型组件,也可存放有关的数据操作等(一般会提取到数据访问层中)。
Scripts: 存放应用程序必须的Javascript文件。
Views: 存放与Controllers在与方法对应的视图,注意:如果存在***Controllers控制器,在Views中就必然会映射一个***命名的文件夹。在Views之下的Shared则存放视图组件的公共部分,如.master、样式表等。
此外,Global.asax实现MVC的URL的路由控制,可以在其中的RegisterRoutes()中设置默认的路由,以下是Global.asax的具体路由代码。
public class MvcApplication : System.Web.HttpApplication
public static void RegisterRoutes(RouteCollection routes)
// 可以忽略的路由配置
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// 设置默认路由
routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
protected void Application_Start()
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
当MVC在.net framework3.5中运行时,还需要在web.config中的httpModules配置节中注册UrlRoutingModule类,用于解析URL路由,这正是MVC与传统的ASP.NET应用程序的根本区别。
&httpModules&
&add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing,
Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF" /&
&/httpModules&
那UrlRoutingModule模块是怎样将页面请求转化为URL路由并调用控制器中的方法来实现视图展现的呢?
(1). 当启动MVC网站时,用户输入的URL地址将首先传递到UrlRoutingModule模块,该模块将解析该URL并选择对应的URL路由,并得到对应的IHttpContext对象来处理该URL路由。在默认情况下,该IHttpContext对象就是MvcHandler对象,通过该对象来选择相关的控制器来处理用户的请求。即UrlRoutingModule模块和MvcHandler对象是MVC网站的入口点,主要实现:选择对应的控制器,实例化控制器对象,调用控制器的相关方法。以下表格更详细地说明页面请求的执行过程。
&(2). 在传统的ASP.NET应用程序中,每一个请求页面对应文件系统的一个文件,这些页面就是其实一个类,该类实现了IHttpHandler接口,每当页面进行请求时将调用ProcessRequest()方法,将指定的内容返回到浏览器中。而在基于MVC的应用程序中,每一个请求页面映射为相应控制器的相关方法,控制器负责将相关的内容返回到浏览器中。需要说明的是,同一个控制器可以包含多个方法来映射多个页面。页面到控制器的映射是通过路径表(RouteTable.Routes)来实现的,在路径表中添加对应的路由对象,实现将具有{controller}/{action}/{id}模式的URL映射到MvcRouteHandler。当请求MVC页面时,web.config配置文件中的UrlRoutingModule模块解析该URL,并获取相关的RouteData对象来创建HttpHandler的实例MvcHandler,然后在调用MvcHandler的ProcessRequest()方法创建控制器的实例,再执行控制器的Execute()方法并通过反射机制指定要调用的View()方法来实现页面内容向浏览器推送。
&&&&& 接下来,我将在刚才新建的MVC应用程序基础上构建模型,来实现应用程序的数据访问和业务逻辑(这里只是演示,不适合实际项目开发)。在"Models"文件夹上添加"ADO.NET实体数据模型"并配置相关的连接(这里以Northwind.edmx为例),选择Categories表,操作完成后应该有如下截图。
&&&&& 然后我们切换到控制器目录,刚才我们谈过,控制器将用户请求的URL路由,分发到相关的方法而不是文件系统中的某个真实文件。打开默认的"HomeController.cs"文件:
//表示执行控制器方法出错时将会打开友好的错误提示页面
[HandleError]
//控制器必须以"***Controllers"命名,并实现Controller或IController
public class HomeController : Controller
//控制器中的方法必须是public,如果是内部方法,将被设置为[NonActionAttribute]
public ActionResult Index()
//设置字典数据以便将指定数据传递到视图
ViewData["Message"] = "Welcome, Miracle!";
//返回指定的内容到浏览器中
return View();
&&&& 我们修改HomeController.cs以便实现Categories的显示、编辑、添加以及详情页面,对应相关的动作方法为Index()、Edit()、Create()以及Details()。
public class HomeController : Controller
//实例化数据实体对象
private Northwind db = new Northwind();
//数据显示
public ActionResult Index()
var model = db.Categories.ToList();
return View(model);
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Edit(int id)
var model = db.Categories.First(c =& c.CategoryID == id);
return View(model);
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection form)
var model = db.Categories.First(c =& c.CategoryID == id);
UpdateModel(model, new[] { "CategoryName", "Description" });
db.SaveChanges();
return RedirectToAction("Index");
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Create()
var model = new Categories();
return View(model);
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(int id, FormCollection form)
var model = db.Categories.FirstOrDefault(c =& c.CategoryID == id);
if (model == null)
var cate = new Categories();
UpdateModel(cate, new[] { "CategoryName", "Description" });
db.AddToCategories(cate);
db.SaveChanges();
return RedirectToAction("Index");
return RedirectToAction("Create");
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Details(int id)
var model = db.Categories.First(c =& c.CategoryID == id);
return View(model);
从以上的方法中我们看到返回类型都是ActionResult类,其实这是个抽象类,实际返回都是ActionResult的子类。
细心地朋友可能会发现,Edit、Create都是以成对的方式出现,这样有什么意义呢?再往下看,不难发现其中一个使用Get,另一个使用Post。也就是说编辑之前我们首先会获取这条数据,编辑完成后提交到服务器。而Create则是使用Get方式打开一个没有值的页面,填充对应的值之后再提交到服务器。这样一想,不就简单的多了。有了控制器,接下来,我们开始创建与控制器方法对应的视图了,操作起来很简单:点击控制器方法名右键"添加视图",将会再对应的Views对应的文件夹(名称为控制器)下建立对应的页面(名称为方法名)。首先创建Index视图(需要选择强类型视图MVCDemo.Models.Categories)和视图内容为List,代码如下:
&%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage&IEnumerable&MVCDemo.Models.Categories&&" %&
&asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"&
&/asp:Content&
&asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"&
类别列表&/h2&
&table border="1"&
&% foreach (var item in Model)
&%: Html.ActionLink("编辑", "Edit", new { id=item.CategoryID }) %&
&%: Html.ActionLink("详情", "Details", new { id=item.CategoryID })%&
&%: item.CategoryID %&
&%: item.CategoryName %&
&%: item.Description %&
&%: Html.ActionLink("创建", "Create") %&
&/asp:Content&
在这个页面中,我们发现很多地方都是用&%***%&包含代码的,还有Html这个内置类,其中包含很多方法用于创建控件。这里ActionLink(linkText,actionName,params)用于创建链接,linkText是链接文本,actionName是控制器的方法名称,params是参数列表。以同样方式创建编辑、新建及详情页面。这里我不再论述,可在中下载。唯一需要改动的就是选择对应的视图内容(Edit、Create、Details)。谈到这里,对MVC已经有了基本的认识,如果对其中的还不太了解,可以试着打开源代码仔细分析一下即可。
阅读(...) 评论()

我要回帖

更多关于 asp.net mvc 框架 的文章

 

随机推荐