第一个MVC模式的程序

数据库

是一个SQL sever数据库,结构很简单,创建名为firstMVC的数据库,只包含一个数据表(名称为Persons),其中共有三列,分别用于保存人员(persons)的ID、姓名以及创建日期:

数据库信息:

模型

需要一个数据模型与数据库进行通信并处理数据。使用LINQ to SQL 从数据库检索数据。
在Model文件夹添加一个新的LINQ to SQL项目条目,并将其名称指定为Persons。然后连接数据库,拖动Persons数据表,将其从服务器资源管理器拖动到LINQ to SQL设计器,结果如图:

控制器

创建控制器,作为模型(数据)与视图(用户界面)之间的桥梁。创建一个新的名为PersonsController的控制器,该控制器有两个动作方法:Index和IndividualPerson。第一个方法处理人员索引请求,第二个方法处理单个人员请求。
代码如下:

using firstMVC.Models;
using System.Linq;
using System.Web.Mvc;

namespace firstMVC.Controllers
{
    public class PersonController : Controller
    {
        //
        // GET: /Person/

        public ActionResult Index()
        {
            ViewData["Message"] = "Person List";

            PersonsDataContext dataContext=new PersonsDataContext();
            ViewData["Persons"] = dataContext.Persons.ToList();
            return View();
        }

        public ActionResult IndividualPerson(int id)  //注意将ActionResult对象作为返回值的方法的书写名字是否与视图名字一样;
        {
            //注意:Persons是表的名字,Where要区分大小写
            PersonsDataContext dataContext=new PersonsDataContext();
            Persons person = dataContext.Persons.Where
                (o => o.ID == id).Single();
            ViewData["PersonName"] = person.Name;
            ViewData["Person"] = person;
            return View();
        }
    }
}
视图

创建视图以显示从控制器返回给最终用户的数据。需要创建一个母版页和两个视图:站点母版页、Index视图和IndividualPerson视图。

Site.Master文件

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>

<!DOCTYPE html>

<html>
<head runat="server">
    <meta name="viewport" content="width=device-width" />
    <title>
        <asp:ContentPlaceHolder ID="TitleContent" runat="server" />
    </title>
</head>
<body>
    <div class="page">
        <div id="header">
            <div id="title">
                <h1>Getting Started
                </h1>
            </div>

            <div id="menucontainer">
                <ul id="menu">
                    <li>
                        <%= Html.ActionLink("Home","Index","Home")%>
                    </li>
                </ul>
            </div>
        </div>
        <div id="main">
            <asp:ContentPlaceHolder ID="MainContent" runat="server" />
            <div id="footer">
                Wrox Beginning ASP.NET MVC
            </div>
        </div>
    </div>
</body>
</html>

Index视图

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="indexTitle" ContentPlaceHolderID="TitleContent" runat="server">
</asp:Content>
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
    <h2>
        <%= Html.Encode(ViewData["Message"]) %>
    </h2>
    <p>
        <%
            IList<firstMVC.Models.Persons> persons = ViewData["Persons"] as IList<firstMVC.Models.Persons>;
            if (persons != null)
            {
        %>
        <ul>
            <% foreach (firstMVC.Models.Persons person in persons)
               {
            %>
            <li>
                <a href="/person/<%= Html.Encode(person.ID) %>">
                    <%=Html.Encode(person.Name) %>
                </a>
            </li>

            <% } %>
        </ul>

        <% } %>
    </p>
</asp:Content>

IndividualPerson视图

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    <%= Html.Encode(ViewData["PersonName"])%>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>
        <%= Html.Encode(ViewData["PersonName"]) %>
    </h2>
    <p>
        <%
            firstMVC.Models.Persons person = ViewData["Person"] as firstMVC.Models.Persons;
            if (person != null)
            {
        %>
        <p>
            Name:
        <%=Html.Encode(person.Name) %>
        </p>
        <p>
            Date Added:
            <%= Html.Encode(person.DateAdded)%>
    </p>
        <% } %>
</asp:Content>
路由

已经在数据模型中完成了从数据库检索数据的操作,并编写了控制器程序以获取这些数据,将其传递到视图。然而,在运行应用程序前,还需要将URL连接到控制器中的相应动作方法,现在,仅在名为Global.asax的ASP.NET应用程序类文件中定制URL路由。

该类中有一个RegisterRoutes静态方法,该方法有一个RouteCollection参数,该参数是定义路由并将它们添加到该集合的恰当位置。

该实例创建了两个路由:一个用于索引页面,另一个用于单个人员页面。

using System.Web.Http;
using System.Web.Mvc;
using System.Web.Routing;

namespace firstMVC
{
    // 注意: 有关启用 IIS6 或 IIS7 经典模式的说明,
    // 请访问 http://go.microsoft.com/?LinkId=9394801
    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            //Index
            routes.MapRoute(
                "Default",
                "",
                new {Controller = "Person", Action = "Index"}

                );
            //IndividualPerson
            routes.MapRoute(
                "IndividualPerson",
                "person/{id}",
                new {Controller = "Person", Action = "IndividualPerson"}

                );
        }

        protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);

           // RouteConfig.RegisterRoutes(RouteTable.Routes); //引用RouteConfig文件

            }
    }
}

测试应用程序:

选择开始执行(不调试),显示索引页面:

通过单击人员的姓名,就可以跳转到人员页面查看其信息:

单击张三

点击李四

通过这个实例,分析各组件如何协同工作。

首先请求索引页面,该请求与PersonController中的Index动作方法的模式相匹配,因此会将请求路由到PersonController中的Index动作方法,该方法加载所有人员列表,并将其传递给Index视图,该视图是显示人员列表的地方。

当单机某个人员姓名时,请求URL和IndividualPerson动作方法模式相匹配,从而将请求路由到该动作方法没改动作方法根据人员ID检索人员的信息,然后将检索的信息传递到IndividualPerson视图进行显示。

该操作流程图为:

这种MVC形式被称为“被动视图”

第一个MVC模式的程序

时间: 2024-10-11 05:15:49

第一个MVC模式的程序的相关文章

使用MVC模式开发程序,完成数据的模糊查询【转】

编写程序:使用MVC模式开发程序,完成数据的模糊查询. 要求: (1)index.jsp用于输入要查询的数据. (2)result.jsp:用于显示结果. (3)queryServlet:用于验证数据.实例化JavaBean.调用连接数据库.控制页面跳转 (4)queryDAO:用于连接数据库及进行数据库的操作如:查询.删除.更改等 (5)Student:JavaBean用于数据的封装,方便将查询结果在servlet与jsp页面之间进行传递等 以上几个部分共同构成了MVC模式,JSP为MVC模式

Swing程序最佳架构设计—以业务对象为中心的MVC模式(转)

前言: 我打算写一系列关于Swing程序开发的文章.这是由于最近我在做一个Swing产品的开发.长期做JavaEE程序,让我有些麻木了.Swing是设计模式的典范,是一件优雅的艺术品,是一件超越时代的产品! 有机会作Swing软件的开发,让我非常有感觉! 呵呵,希望有机会能够用Java3D编写软件,那种感觉一定更棒! Java和Swing都是杰作.我这个人对别人一向很挑剔的,能够得到我由衷地赞誉,可想而知它们有多优秀了.奇怪的是,它们居然一直都无法占领桌面市场.有人说这是技术的原因.我认为这应该

IOS设计模式之一(MVC模式,单例模式)

本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq)翻译,如果你发现有什么翻译错误,请与我联系谢谢. iOS 设计模式-你可能已经听说过这个词,但是你真正理解它意味着什么吗?虽然大多数的开发者可能都会认为设计模式是非常重要的,然而关于设计模式这一主题的文章却不多,并且有时候我们开发者在写代码的时候也不会太关注它. 在软件设计领域,设计模式是对通用问题

[转载]WIKI MVC模式

MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller). MVC模式最早由Trygve Reenskaug在1978年提出[1] ,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件设计模式.MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能.除此之外,此

(06/05/11) MVC模式

MVC并不属于GOF的23个设计模式之列,但是它在GOF的书中作为一个重要的例子被提出来,并给予了很高的评价.一般的来讲,我们认为GOF的23个模式是一些中级的模式,在它下面还可以抽象出一些更为一般的低层的模式,在其上也可以通过组合来得到一些高级的模式.MVC就可以看作是一些模式进行组合之后的结果. MVC定义:即Model-View-Controller,把一个应用的输入.处理.输出流程按照Model.View.Controller的方式进行分离,这样一个应用被分成三个层,即模型层.视图层.控

ASP.NET MVC概述及第一个MVC程序

一.ASP.NET 概述        1. .NET Framework 与 ASP.NET                .NET Framework包含两个重要组件:.NET Framework类库和公共语言进行时.编写ASP.NET                    页面需要用到.NET Framework的框架类库和公共语言进行时        2. ASP.NET MVC简介            ASP.NET MVC是ASP.NET技术的一个子集,它是ASP.NET 技术和M

MVC模式在Java web 应用程序的实现

一.MVC简介 MVC(Model-View-Controller)模型-视图-控制器,最早由Trygve Reenskaug在1978年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件架构.MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能.除此之外,此模式通过对复杂度的简化,使程序结构更加直观.软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能. Mode

MVC模式在Java Web应用程序中的实现

MVC简介 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.MVC被独特的发展起来用于映射传统的输入.处理和输出功能在一个逻辑的图形化用户界面的结构中. MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创

MVC入门学习笔记(一)第一个MVC应用程序(基础知识)

下载了并安装Visual Studio Ultimate 2013 RC 和 MS SQL Server 2014.使用最新版本,可以了解和学习到最新技术. 去微软官方网站,学习MVC相关的教程:http://www.asp.net/mvc 去听微软官方网站推荐的MVC视频,虽然是英语授课,看操作即可......http://pluralsight.com/training/Player?author=scott-allen&name=mvc4-building-m1-intro&mode