• ASP.NET MVC 小牛之旅2:体验第一个MVC程序


    了解了什么是MVC之后,接下来用一个非常简单的留言板程序概要的了解MVC网站开发的过程,对MVC开发有个大致的轮廓。第一个项目将不会提到过多与数据库相关的技术,因此将以Framework Code First开发技术进行数据访问,核心在于体验MVC开发的过程。

    2.1利用ASP.NET MVC4项目模板创建项目

    开启Visual Studio2012,选择“文件”→“项目”的菜单命令

    在打开的“新建项目”对话框中展开web→“ASP.NET MVC4 Web 应用程序”,修改一下名称为“MvcGuestbook” 如图所示:

    点击确定后,会先弹出项目模板选择,询问你要使用哪个项目模板。选择“Internet应用程序”,其他默认即可,最后单击确定按钮,如图所示:

    这个MVC项目就完全建好了,接下来“调试”→“启动调试”(或者按下F5)命令执行运行网站。

    此网站具有非常基本的功能,包括简单的页面与会员机制,这些页面都套用主版页面(Layout Page),使用ASP.NET内建的Membership功能,可以进行会员注册、登陆、注销等。如图所示:

    ASP.NETMVC4 项目模板再内建的会员机制,在网页第一次运行该会员机制相关的页面后,会在网站的APP_Date目录下自动创建默认的数据库文档(*.mdf、*.ldf),其文件命名规则会是“asp.net-项目名称-日期时间.mdf”。

    项目创建完成后,会自动创建几个标准的目录结构与重要文档,如图所示:

    MVC项目概要说明:

      

    文件夹或文件 

    描述 

    /App_Data 

    放置私有数据:XML文件、SQLite 、SQL Server数据库文件、或其它基本文件的存储(数据)库

    IIS 不对此文件夹进行内容服务(Web无法请求到)

    /App_Start 

    包含项目核心的配置设置:路由、过滤器及其它内容包(脚本样式捆绑包等)

    /bin 

    存放MVC应用程序编译好的程序集,不在GAC(全局程序集缓存)中的引用程序集 

    IIS 不对此文件夹进行内容服务(Web无法请求到)。在项目中“显示所有文件”才能看到。编译生成的二进制文件,通常不应该把它们放在源控制中

    /Content 

    放置静态内容:CSS文件、图像等

    约定,不是必须。

    /Controllers 

    放置控制器类

    约定,控制器类是可以放在任何地方,或是在一个独立的项目中定义模型类

    /Models 

    放置视图模型或域模型类(简单项目)。

    约定,一般用一个专用的项目定义域模型,此文件夹只放视图模型。

    /Scripts

     存放JS库,JQuery和几个流行库  约定,可更改
    /Views  保存视图分部视图,通常按关联的控制器进行命名文件夹  /Views/Web.config阻止IIS对此目录内容进行服务,必须通过Action方法进行渲染
    /Views/Shared  保存布局、分享的视图(非专用的)  
    /Views/Web.config  不是应用程序配置文件。含有全视图能够与ASP.NET进行工作、防止IIS调用视图所需要的配置,默认导入视图的命名空间  
    /Global.asax  全局ASP.NET应用程序类。后台代码类(Global.asax.cs)用于注册路由配置、建立涉及程序初始化、停机、出现未知异常情况时运行的代码。  同web Form中的Global.asax作用
    /Web.config  应用程序配置文件。  同web Form中的Web.config作用

    2.2MVC中的约定

    1.建议用户的约定:Scripts文件夹等

     2.“约定优于配置”:不需要明确地配置控制器与其视图之间的关联,只要遵从命名约定就能正常工作,如:

        (1)控制器类约定,必须以“Controller”结尾,类别继承于Controller基类,必须包含数个回传值为ActionResult的公开方法(动作Action);

        (2)视图约定,视图及分部视图放在/Views/<控制器名>文件夹中(忽略结尾Controller);

        (3)布局约定,以下划线(_)字符做为文件名前缀,且放在/Views/SHared文件夹中。除Empty项目模板外,VS会创建一个名为_Layout.cshtml的布局。默认情况下,会通过/Views/_ViewStart.cshtml文件将这个布局运用于所有视图。

    2.3创建数据模型(Model)

    在解决方案资源管理器中选择Model目录,单击鼠标右键,在弹出的快捷菜单中选择“添加”→“类”命令,如图所示:

    其代码如下:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Web;
     5 
     6 namespace MvcGuestbook.Models
     7 {
     8     public class Guestbook
     9     {
    10         public int Id { get; set; }
    11         public string Name { get; set; }
    12         public string Email { get; set; }
    13         public string Content { get; set; }
    14     }
    15 
    16 }


    之后生成一次解决方案,并确保没有任何问题。

    2.4创建控制器、动作与视图

    在解决方案资源管理器窗口选择Controller目录,单击鼠标右键,在弹出的快捷菜单中选择“添加”→“控制器”命令,并命名为“GuestbookController”

    在基架选项区还有4个选项可以设置,在这里我们在模板下选择“包含读/写操作和视图的MVC控制器(使用Entity Framework)”选项,而在模型类中则选择我们新增的Guestbook模型类别

    在“添加控制器”对话框的“基架选项”中还有个“数据上下文类”选项,由于我们尚未创建“数据上下文类”,但我们可以借此通过这个新增项目帮我们自动创建,因此可以选择“<新建数据上下文...>”选项,选择之后默认的名称,最后单击“添加按钮”完成控制器的添加,如图所示:

    GuestbookController自动创建的代码:

      1 namespace MvcGuestbook.Controllers
      2 {
      3     public class GuestbookController : Controller
      4     {
      5         private MvcGuestbookContext db = new MvcGuestbookContext();
      6 
      7         //
      8         // GET: /Guestbook/
      9 
     10         public ActionResult Index()
     11         {
     12             return View(db.Guestbooks.ToList());
     13         }
     14 
     15         //
     16         // GET: /Guestbook/Details/5
     17 
     18         public ActionResult Details(int id = 0)
     19         {
     20             Guestbook guestbook = db.Guestbooks.Find(id);
     21             if (guestbook == null)
     22             {
     23                 return HttpNotFound();
     24             }
     25             return View(guestbook);
     26         }
     27 
     28         //
     29         // GET: /Guestbook/Create
     30 
     31         public ActionResult Create()
     32         {
     33             return View();
     34         }
     35 
     36         //
     37         // POST: /Guestbook/Create
     38 
     39         [HttpPost]
     40         [ValidateAntiForgeryToken]
     41         public ActionResult Create(Guestbook guestbook)
     42         {
     43             if (ModelState.IsValid)
     44             {
     45                 db.Guestbooks.Add(guestbook);
     46                 db.SaveChanges();
     47                 return RedirectToAction("Index");
     48             }
     49 
     50             return View(guestbook);
     51         }
     52 
     53         //
     54         // GET: /Guestbook/Edit/5
     55 
     56         public ActionResult Edit(int id = 0)
     57         {
     58             Guestbook guestbook = db.Guestbooks.Find(id);
     59             if (guestbook == null)
     60             {
     61                 return HttpNotFound();
     62             }
     63             return View(guestbook);
     64         }
     65 
     66         //
     67         // POST: /Guestbook/Edit/5
     68 
     69         [HttpPost]
     70         [ValidateAntiForgeryToken]
     71         public ActionResult Edit(Guestbook guestbook)
     72         {
     73             if (ModelState.IsValid)
     74             {
     75                 db.Entry(guestbook).State = EntityState.Modified;
     76                 db.SaveChanges();
     77                 return RedirectToAction("Index");
     78             }
     79             return View(guestbook);
     80         }
     81 
     82         //
     83         // GET: /Guestbook/Delete/5
     84 
     85         public ActionResult Delete(int id = 0)
     86         {
     87             Guestbook guestbook = db.Guestbooks.Find(id);
     88             if (guestbook == null)
     89             {
     90                 return HttpNotFound();
     91             }
     92             return View(guestbook);
     93         }
     94 
     95         //
     96         // POST: /Guestbook/Delete/5
     97 
     98         [HttpPost, ActionName("Delete")]
     99         [ValidateAntiForgeryToken]
    100         public ActionResult DeleteConfirmed(int id)
    101         {
    102             Guestbook guestbook = db.Guestbooks.Find(id);
    103             db.Guestbooks.Remove(guestbook);
    104             db.SaveChanges();
    105             return RedirectToAction("Index");
    106         }
    107 
    108         protected override void Dispose(bool disposing)
    109         {
    110             db.Dispose();
    111             base.Dispose(disposing);
    112         }
    113     }
    114 }

    此时,在Controllers目录新增了一个GuestbookController.cs。此外,由于我们在添加的时候选择了“包含读/写操作和视图的MVC控制器(使用Entity Framework)”模板,所以除了新增控制器外它连同所有的视图页面也全部一次创建完成。而在添加控制器的过程中新增了一个数据上下文类(DateContextClass),因此Model目录下多了一个MvcGuestbookContext.cs类文档,如图所示:

    最后,这个项目已经完成,进行测试网页:

    直接运行网站,启动调试,打开网页输入http://localhost:28039/Guestbook,按Enter键进入该页面。

    如图所示,可以进行简单的增删改查:

    至此,第一个MVC体验网站终于完整完成了,这个留言板还有许多要改进的地方。由于技术水平有限,可能不完全正确,仅供参考。

  • 相关阅读:
    strong和copy的区别
    xib托线出来的为什么是weak而不是strong
    iOS 序列化与反序列化
    iOS开发- 蓝牙后台接收数据(BLE4.0)
    iOS开发拓展篇-XMPP简单介绍
    OS开发拓展篇—应用之间的跳转和数据传
    ERROR 1130: Host '192.168.1.3' is not allowed to connect to this MySQL ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'
    什么是低8位?
    Eclipse自动生成作者、日期注释等功能设置
    eclipse重构变量名的快捷键, 批量修改变量名的快捷键
  • 原文地址:https://www.cnblogs.com/qinyi173/p/4694841.html
Copyright © 2020-2023  润新知