• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NETMVC3实践--Movie,一个简单的MVC3应用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  作为本系列的第一个应用,本文选取了asp.net上的一个tutorial project,“movie list”作为例子,由于本系列面向的是对asp.net以及mvc开发有一定基础的读者,除razor相关内容外,均从简介绍。

1、创建工程

选择C#的Web项目,创建一个MVC3项目,如图1.,我们使用第二个模板,并确保其中的View Engine为Razor,并勾选HTML5语法标签。

图1.

创建好项目之后,Project Layout如图2所示,请记住这个Layout,这是一个典型的MVC3项目的布局。

图2.

对于使用过MVC2的读者来说,相信对_ViewStart和_Layout两个文件不会陌生,关于ASP.NET MVC框架的其他细节,请参考:

MSDN:MVC3 MSDN上的MVC3参考,建议快速浏览

MSDN:Razor Razor的整体介绍,建议未使用过的读者详细了解下

ASP.NET MVC3实践--入门

2、观察和修改HomeController

打开HomeController.cs,我们修改其中的ViewBag.Message内容,如图3所示。这里我们将第一次接触到Razor,并且一上来就是非常强大的一个内容,ViewBag。这是一个动态类型,可以动态的设置一个具有get/set方法的属性,简单的说就是,你可以给ViewBag添加你想要的信息,比如ViewBag.LoveMessage、ViewBag.Eureka等等。这里我们给ViewBag附加一个Eureka属性(不要问我Eureka是什么……⊙﹏⊙b),然后给其赋值为:“My Movie List”。

图3.

注意,我们这里使用的是MVC模板提供的HomeController,我们修改了模板预先设的ViewBag.Message,由于ViewBag.Message在Index的View中被应用了,因此,我们需要修改View中的引用,如图4所示。这里我们见到了Razor的有一个及其方便的功能,“@”符号,由“@”引导的语句,Razor引擎会将其解析为C#代码,“@{//code block}”则可以支持代码段。作为尖括号写到吐的Web开发人员,这无疑又是一个非常好的改进。

图4.

好了,这时候,让我们编译项目,然后看看我们的第一个MVC3应用吧,run it!如图5所示

图5.

3、创建一个我们自己的Controller并为其View。

细心的读者可能会发现,我们前面的HomeController中,注释掉了About方法。是的,在这一步开始之前,你需要注释掉HomeController中的About的方法,并删除View中Home目录下的About.cshtml。好的,我们开始创建Controller,右键单击Controller文件夹,选择添加->Controller,创建一个名为About的Controller,这里使用Empty模板,我们暂时还不需要它做更多的事情。

图6.

之后我们将得到一个AboutController类,如图7所示。有了Controller,我们自然会想到View(注意,这里我们不需要About做更多的事,所以我们不需要Model),要添加View,在Visual Studio中是一件再简单不过的事情了,右键点击方法,选择Add View,Visual Studio就会为我们生成对应方法的View了。

图7.

 

我们在生成的View中稍作显示内容的修改,如图8所示

图8.

这里再次强调,我们使用的事Visual Studio提供的项目模板,我们删除了HomeController中的About方法及其View,但是还没有修改About的链接,注意,模板中在Layout里面有About的链接。我们修改原ActionLink的ActionName和Controller为我们的AboutController的Index方法和新的Controller名字,About。

图9.

好的,修改完成,我们来看看我们的成果吧。

图10.

4、使用EntityFramework的Code First创建一个Model,并为其创建Controller和View。

再次强调,本文面向有一定ASP.NET基础的读者,如果你有Hibernate的变成经验,也可以。关于Code First,本文以及后续文章都不会做详细介绍,但是会有大量例子。所谓Code First,义如其名,先有Code在有其他,换句话说,先写了数据实体的类,然后数据库什么的,EntityFramework会为我们搞定。Code First属于EntityFramework中的一种模式,其他的有Schema First和Model First。

首先,在Models文件夹中添加一个类,命名为Movie,如图11所示

图11.

Tips:许多Visual Studio的使用者并不熟悉Visual Studio的操作细节,比如这里我们要为Moive创建5个属性,在创建每个属性前,我们只需要键入“prop”然后按两次tab建,即可生成一行public属性模板。

然后,我们创建一个Context,最简单的Code First,我们的数据库就建好了!

图12.

再有了数据的code之后,我们只需要在根目录)的web.config中添加connectionString,后台的数据处理EntityFramwork会为我们完成(相信有Hibernate开发经验的读者很容易理解这一点)

需要注意的是,connectionString需要设置name属性为之前创建的Context属性:

      <add name="MovieDbContext"
           connectionString="data source=.\sqlexpress;integrated security=SSPI;database=Movie"
           providerName="System.Data.SqlClient"/>

Model已经有了,MVC还差V和C,这里我们不在手动添加V和C了,而是使用Visual Studio的强大自动化功能,右键单击Controllers文件夹,添加一个Controller,这里,如图13所示。

Template:具有read/write/view方法的Controller

Model class:Movie

Data context class:MovieDbContext

并确保使用Razor引擎。

图13.

然后点击Add,Visual Studio便会为我们自动创建Movie这个Model的Controller和View了。Movies的代码如代码段所示,可以看到,出了Index方法,Visual Studio还自动创建了数个其他的方法,并且,其中部分还有GET和POST两个版本。

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcMoive.Models;

namespace MvcMoive.Controllers
{ 
    public class MoviesController : Controller
    {
        private MovieDbContext db = new MovieDbContext();

        //
        // GET: /Movies/

        public ViewResult Index()
        {
            return View(db.Movies.ToList());
        }

        //
        // GET: /Movies/Details/5

        public ViewResult Details(int id)
        {
            Movie movie = db.Movies.Find(id);
            return View(movie);
        }

        //
        // GET: /Movies/Create

        public ActionResult Create()
        {
            return View();
        } 

        //
        // POST: /Movies/Create

        [HttpPost]
        public ActionResult Create(Movie movie)
        {
            if (ModelState.IsValid)
            {
                db.Movies.Add(movie);
                db.SaveChanges();
                return RedirectToAction("Index");  
            }

            return View(movie);
        }
        
        //
        // GET: /Movies/Edit/5
 
        public ActionResult Edit(int id)
        {
            Movie movie = db.Movies.Find(id);
            return View(movie);
        }

        //
        // POST: /Movies/Edit/5

        [HttpPost]
        public ActionResult Edit(Movie movie)
        {
            if (ModelState.IsValid)
            {
                db.Entry(movie).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(movie);
        }

        //
        // GET: /Movies/Delete/5
 
        public ActionResult Delete(int id)
        {
            Movie movie = db.Movies.Find(id);
            return View(movie);
        }

        //
        // POST: /Movies/Delete/5

        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(int id)
        {            
            Movie movie = db.Movies.Find(id);
            db.Movies.Remove(movie);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}

关于MVC的细节,这里不做详述。接下来,我们看一看系统为我们创建了那些View,如图14所示,

图14.

这里我们来看其中一个View的内容的一段。

图15.

关于这段代码,细心的读者会发现,这简直太犀利了,Html和C# Code竟然如此完美的无缝结合在一起!关于更多的细节,我将在后续文章中为大家带来。

好的,最后,我们来看看我们的最终成果吧(这里,我使用Create New创建了了两条栏目)。

图16.

这就是Razor,这就是ASP.NET MVC3!


本文涉及到的代码下载

为了避免兼容性问题,这里只提供改动了的文件,如需使用,只需按本文前面所述的步骤创建工程,然后将包中内容覆盖之即可,后续文章的下载也同样如此。



鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Ubuntu10.10下Mono2.10+Nginx+fastcgi 部署asp.net网站发布时间:2022-07-10
下一篇:
ASP.NET MVC 利用ActionFilterAttribute来做权限等发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap