在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
作为本系列的第一个应用,本文选取了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! 为了避免兼容性问题,这里只提供改动了的文件,如需使用,只需按本文前面所述的步骤创建工程,然后将包中内容覆盖之即可,后续文章的下载也同样如此。 |
请发表评论