摘要
      本文首先一步一步完成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)——第二篇:第一个页面相关推荐

  1. T2噬菌体MVC案例教程

    T2噬菌体MVC案例教程 http://www.cnblogs.com/leoo2sk/archive/2008/10/27/1320285.html MVC初学者浅显易懂的教程 转载于:https: ...

  2. JavaScript组件之JQuery(A~Z)教程(基于Asp.net运行环境)[示例代码下载](一)

    (一).概述 现在有好多比较优秀的客户端脚本语言组件, 如: Prototype.YUI.jQuery.mootools.Bindows, Scriptaculous, FCKEditor 等, 都非 ...

  3. 首席新媒体黎想教程:线上活动推广执行手册——第二篇

    其实每个活动运营都想策划出"锦鲤"."冰桶挑战"."丢书大作战".这样的爆款刷屏的活动,但是爆款是[可遇不可求的],它的背后说庞大的用户基数 ...

  4. ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第一篇:准备工作

    摘要       本文将简要介绍这个文章系列的目的.形式及大体内容.并且完成开始学习这个系列前所必要的准备工作. 前言       ASP.NET MVC作为微软官方的MVC解决方案,推出有一段时间了 ...

  5. 第六篇:拦截器( MVC案例教程(基于ASP.NET MVC beta))

    http://ljl-xyf.javaeye.com/blog/725196 摘要       本文将对"MVC公告发布系统"的发布公告功能添加日志功能和异常处理功能,借此来讨论A ...

  6. ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第三篇

    摘要       本文对ASP.NET MVC的全局运行机理进行一个简要的介绍,以使得朋友们更好的理解后续文章. 前言       在上一篇文章中,我们实现了第一个ASP.NET MVC页面.对于没有 ...

  7. ASP.NET MVC案例教程——拦截器 Filter

    摘要       本文将对"MVC公告发布系统"的发布公告功能添加日志功能和异常处理功能,借此来讨论ASP.NET MVC中拦截器的使用方法. 一个小难题       我们继续完善 ...

  8. ASP.NET程序设计案例教程《上机操作题》

    目录 需求 详细步骤: 完成创建效果图 查看布局效果 布局代码 修改后的效果 运行测试 效果展示 源代码下载地址 需求 创建一个ASP.NET空网站,在其中新建一个网页,显示单击"提交&qu ...

  9. 《数学建模简明教程--基于python》学习笔记-第二章-绘图与解方程组-课后习题解答

    文章目录 准备工作 01 绘制双曲函数图像 02 绘制伽马函数图像 03 单个窗口绘制二次函数(k=1,2,...,6) 04 根据不同K值绘制子图 05 绘制二次曲面 05-1 绘制单叶双曲面 05 ...

最新文章

  1. 关于C#调用非托管DLL,报“内存已损坏的”坑,坑,坑
  2. Source Insight 基本使用(1)-使用Source Insight查看Android Framework 源码
  3. python string库_《python标准库》--string
  4. 何时将空间编码为加号(+)或%20?
  5. AUP2敏捷统一过程之一:序言及降低过程的总体拥有成本
  6. 打开指定摄像头_我在无人区深处,遇到了一个高清摄像头
  7. Java提高学习之Object(3)
  8. cocos2d-x游戏开发(十五)游戏加载动画loading界面
  9. 转:springboot servlet使用配置
  10. Leetcode--7. 整数反转
  11. 怎么用nuget程序包管理器安装jquery_Nuget服务器
  12. [转载] python2.7中模块学习- textwrap 文本包装和填充
  13. 最新Java面试题,常见面试题及答案汇总
  14. qqxml图片代码_PCQQ - 发送自定义的XML卡片消息
  15. 青果教务系统适配小爱课程表
  16. bootstrap编写响应式页面
  17. 人工智能—— 产生式表示法
  18. 手动连接wifi失败分析
  19. 利用计算机本地文档重装系统,电脑如何用本地模式重装win10
  20. HTML 表格合并(表格合并行属性 rowspan 将多行合并成一行)

热门文章

  1. 张小龙的小程序革命,复盘731天,用“小”来改变这个世界
  2. 回顾亚马逊推荐系统20年发展
  3. 从0到1建立一张评分卡之模型建立
  4. Java 8 - 时间API
  5. Tomcat - Tomcat套娃式架构与配置文件的对应关系解读
  6. MyBatis-04 MyBatis XML方式之insert元素
  7. Linux启动多个Oracle实例
  8. interface declaration, parcelable declaration, AidlTokenType.import or AidlTokenType.package ...
  9. go语言 html 模板语法,go语言快速入门:template模板
  10. java mysql查询界面_Java GUI小程序 实现数据库查询界面-Go语言中文社区