ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第二篇:第一个页面
摘要
本文首先一步一步完成Demo的第一个页面——首页。然后根据实现过程,说明一下其中用到的与ASP.NET MVC相关的概念与原理。
让第一个页面跑起来
现在,我们来实现公告系统中的第一个页面——首页。它非常简单,只包括所有公告分类的列表,并且每个列表项是一个超链接。其中分类数据是用我们的Mock组件得到的。实现后界面如下:
在开始之前,我们要删几个东西。因为默认情况下建立一个MVC项目时里面包含了几个示例页面,我们要做的就是:
1.将Controllers文件夹下所有文件删除。
2.将Views文件夹下除了Shared文件夹和Web.config外的所有文件删除,然后将Shared文件夹里面的文件删除。
完成以上几步后,就可以开始实现第一个页面了。
实现控制器
在Controllers文件夹下新建一个文件,类型选择“MVC Controller Class”,名字命名为HomeController.cs。这就是一个控制器类。然后我们为它编码,具体代码如下:
HomeController.cs:
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Web;
5using System.Web.Mvc;
6using System.Web.Mvc.Ajax;
7using MVCDemo.Models;
8using MVCDemo.Models.Interfaces;
9using MVCDemo.Models.Entities;
10
11namespace MVCDemo.Controllers
12{
13 public class HomeController : Controller
14 {
15 public ActionResult Index()
16 {
17 ICategoryService cServ = ServiceBuilder.BuildCategoryService();
18 ViewData["Categories"] = cServ.GetAll();
19 return View("Index");
20 }
21 }
22}
直观看来,这个类不是很复杂。它首先继承了Controller类。Controller类是ASP.NET MVC框架中提供的一个控制器积累,所有我们自定义的控制器类都要继承此基类。然后这个类中有一个Index方法,返回值类型是ActionResult。
这里对其中涉及到的概念简单解释一下。首先,控制器类可以说是ASP.NET MVC的核心类,因为它将处理一切请求,并处理所有页面转发等表示逻辑,这也是使用了ASP.NET MVC后与传统ASP.NET应用最大的差别。在传统模式下,一个用户请求的url将对应一个aspx文件,而在ASP.NET MVC下,一个用户请求对应某个控制器类中的一个方法,而这个方法,就叫做一个Action。至于如何对应的,则是通过对url的解析。
例如,在传统情况下,http://localhost/Default.aspx表示请求网站根目录下的Default.aspx文件。而现在,url可能变成了这种样子:http://localhost/Home/Index。这个意思就是,请求名叫HomeController控制器类下的Index方法。一般地,默认情况下,请求url的格式为http://localhost/{ControllerName}/{ActionName}。其中{ControllerName}是控制器类名“Controller”前的部分,{ActionName}就是方法名。
当然,这种映射规则是可以更改的,而且请求Action时也可以传递参数,但这些都是后话,以后再慢慢讨论。
下面再深入Index方法,看看这个Action都做了什么。它首先调用了业务逻辑组件(当然,是Mock的),然后将GetAll返回的公告分类数据赋予ViewData["Category"],最后调用View()方法返回一个ActionResult。ViewData是什么呢?你可以把他理解成一个关联数组,它保存需要传给视图的数据。而View是Controller类的一个方法,它返回一个ActionResult实例。这样说可能有点抽象,其实直观就是将某个视图(一般就是一个aspx文件)呈现到浏览器中。那么如何知道呈现哪一个视图呢?默认情况下,View方法会到网站的Views文件夹下的与控制器类同名的文件夹下寻找与Action方法同名的视图。例如,HomeController的Index方法就会寻找Views/Home/Index.aspx,如果找不到,就会到Shared下寻找,再找不到就报错了。当然,你也可以给View方法传递一个字符串参数,表示视图名称。
实现视图
上文说到,当请求http://localhost/Home/Index时,HomeController的Index方法会被调用,而Index方法最后要呈现Views/Home/Index.aspx视图,所以,我们要在Views文件夹下建立一个Home文件夹,然后再新建一个Index.aspx视图。如果您使用的是VS2008 SP1,那么建立视图非常方便,只要在Home文件夹下右键单击,选Add--->View,然后指定视图名就可以了。如果不是SP1的,就新建一个Item,类型选择“MVC View Page”。建立好的视图其实就是一个aspx页面,但是其继承了View。这也是一个基类,所有视图需要继承它。
下面给出Index.aspx的代码:
Index.aspx:
1<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="MVCDemo.Views.Home.Index" %>
2<%@ Import Namespace="MVCDemo.Models.Entities" %>
3
4<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
6<html xmlns="http://www.w3.org/1999/xhtml" >
7<head runat="server">
8 <title></title>
9</head>
10<body>
11 <% List<CategoryInfo> categories=ViewData["Categories"] as List<CategoryInfo>; %>
12 <div>
13 <h1>MVC公告发布系统</h1>
14 <ul>
15 <% foreach (CategoryInfo c in categories)
16 {
17 %>
18 <li><%= Html.ActionLink(c.Name, "List/" + c.ID, "Announce") %></li>
19 <% } %>
20 </ul>
21 </div>
22</body>
23</html>
大约分析一下。刚才说过,Index这个Action最后呈现这个aspx作为视图,而且ViewData中包含了要给视图传递的数据。在那里,我们将所有公告类别数据放在ViewData["Categories"]中。这里可以看到,我们将这些数据取出,并用来呈现页面。至于那个Html.Action,这里先不细说。你只要知道,这个方法可以生成一个链接,其中第一个参数是链接文字,第二个是要链接到的url的Action名,第三个是要链接到的url的控制器名。关于这些,我们以后细细讨论。
运行这个例子,并将请求url定位到Home/Index,就可以看到运行效果。
你可能会发现,不需要指定Home/Index,在输入根目录后就直接呈现了这个页面。其实这是因为在默认的路由配置里,Home和Index是默认的控制器名和Action名。以后我们将会讨论路由问题。
小结
通过上面的过程,我们第一个ASP.NET MVC页面已经能呈现出来了。而且不单纯只是一个页面,其中还呈现了业务逻辑组件返回的数据。
也许,您对其中许多地方还有困惑。不要着急,在下一篇中,我们做这个系统的步伐先缓一缓,我将用一整篇文章,详细介绍一下ASP.NET MVC中许多重要的概念与原理。
from: http://www.cnblogs.com/leoo2sk/archive/2008/10/28/1321056.html
ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第二篇:第一个页面相关推荐
- T2噬菌体MVC案例教程
T2噬菌体MVC案例教程 http://www.cnblogs.com/leoo2sk/archive/2008/10/27/1320285.html MVC初学者浅显易懂的教程 转载于:https: ...
- JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载](一)
(一).概述 现在有好多比较优秀的客户端脚本语言组件, 如: Prototype.YUI.jQuery.mootools.Bindows, Scriptaculous, FCKEditor 等, 都非 ...
- 首席新媒体黎想教程:线上活动推广执行手册——第二篇
其实每个活动运营都想策划出"锦鲤"."冰桶挑战"."丢书大作战".这样的爆款刷屏的活动,但是爆款是[可遇不可求的],它的背后说庞大的用户基数 ...
- ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第一篇:准备工作
摘要 本文将简要介绍这个文章系列的目的.形式及大体内容.并且完成开始学习这个系列前所必要的准备工作. 前言 ASP.NET MVC作为微软官方的MVC解决方案,推出有一段时间了 ...
- 第六篇:拦截器( MVC案例教程(基于ASP.NET MVC beta))
http://ljl-xyf.javaeye.com/blog/725196 摘要 本文将对"MVC公告发布系统"的发布公告功能添加日志功能和异常处理功能,借此来讨论A ...
- ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第三篇
摘要 本文对ASP.NET MVC的全局运行机理进行一个简要的介绍,以使得朋友们更好的理解后续文章. 前言 在上一篇文章中,我们实现了第一个ASP.NET MVC页面.对于没有 ...
- ASP.NET MVC案例教程——拦截器 Filter
摘要 本文将对"MVC公告发布系统"的发布公告功能添加日志功能和异常处理功能,借此来讨论ASP.NET MVC中拦截器的使用方法. 一个小难题 我们继续完善 ...
- ASP.NET程序设计案例教程《上机操作题》
目录 需求 详细步骤: 完成创建效果图 查看布局效果 布局代码 修改后的效果 运行测试 效果展示 源代码下载地址 需求 创建一个ASP.NET空网站,在其中新建一个网页,显示单击"提交&qu ...
- 《数学建模简明教程--基于python》学习笔记-第二章-绘图与解方程组-课后习题解答
文章目录 准备工作 01 绘制双曲函数图像 02 绘制伽马函数图像 03 单个窗口绘制二次函数(k=1,2,...,6) 04 根据不同K值绘制子图 05 绘制二次曲面 05-1 绘制单叶双曲面 05 ...
最新文章
- 关于C#调用非托管DLL,报“内存已损坏的”坑,坑,坑
- Source Insight 基本使用(1)-使用Source Insight查看Android Framework 源码
- python string库_《python标准库》--string
- 何时将空间编码为加号(+)或%20?
- AUP2敏捷统一过程之一:序言及降低过程的总体拥有成本
- 打开指定摄像头_我在无人区深处,遇到了一个高清摄像头
- Java提高学习之Object(3)
- cocos2d-x游戏开发(十五)游戏加载动画loading界面
- 转:springboot servlet使用配置
- Leetcode--7. 整数反转
- 怎么用nuget程序包管理器安装jquery_Nuget服务器
- [转载] python2.7中模块学习- textwrap 文本包装和填充
- 最新Java面试题,常见面试题及答案汇总
- qqxml图片代码_PCQQ - 发送自定义的XML卡片消息
- 青果教务系统适配小爱课程表
- bootstrap编写响应式页面
- 人工智能—— 产生式表示法
- 手动连接wifi失败分析
- 利用计算机本地文档重装系统,电脑如何用本地模式重装win10
- HTML 表格合并(表格合并行属性 rowspan 将多行合并成一行)
热门文章
- 张小龙的小程序革命,复盘731天,用“小”来改变这个世界
- 回顾亚马逊推荐系统20年发展
- 从0到1建立一张评分卡之模型建立
- Java 8 - 时间API
- Tomcat - Tomcat套娃式架构与配置文件的对应关系解读
- MyBatis-04 MyBatis XML方式之insert元素
- Linux启动多个Oracle实例
- interface declaration, parcelable declaration, AidlTokenType.import or AidlTokenType.package ...
- go语言 html 模板语法,go语言快速入门:template模板
- java mysql查询界面_Java GUI小程序 实现数据库查询界面-Go语言中文社区