zoukankan      html  css  js  c++  java
  • 瞧一瞧,看一看呐,用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!!

                           瞧一瞧,看一看呐用MVC+EF快速弄出一个CRUD,一行代码都不用写,真的一行代码都不用写!!!!

           现在要写的呢就是,用MVC和EF弄出一个CRUD四个页面和一个列表页面的一个快速DEMO,当然是在不写一行代码的情况下.因为VS是这个做到这个的.条件呢,你需要一个VS2012或者VS2013和一个打开的数据库.至于2010可不可以,这个我尚不可知.这篇文章呢,有点长,主要是图,可以让一个没有接触过EF的人看我的图就可以弄一个DEMO出来了且一行代码都不用敲,个人认为能做到不敲代码而弄出这个的一个DEMO来倒并不是难事,点点几下也就可以了,最主要的是能做出来然后参透其中代码的意思,比如一些HTML的一些辅助方法,所以我这里也将其代码都一一附上了.另外我是有写过关于HTML辅助方法的文章的,有兴趣的可以看一下我另外写的文章.最好的是能再创建控制器的时候能创建一个空的控制器而用诸如HTML辅助方法等实现此DEMO,那样想必是学到很多的东西了.好吧,闲话少说,咱们开始吧.

          第一步,创建一个MVC4或者MVC3的一个项目,如果用13就只能创MVC4的项目了.它是会跟我们生成一个项目文件的,比如Controller和View等(此可见下面的第十幅图),创建的图如下: 

           第二步,选择一个空的模板,引擎就选择Razor吧(2012的话就只有三个可以选择了),如图:

           第三步,添加一个新建项,如图:

          第四步,在新建项里,数据中添加一个ADO.NET数据实体模型,并将此模型的名字改成Info,因为我数据库里的表名是叫Info的.如图:

          第五步,选择从数据库中生成.如图:

            第六步,新建一个连接,表示联到哪个服务.不用管下图中的那个下一步的框,是我多框了一下.如图:

          第七步,选择要连接服务名字(我的是.SQLEXPRESS)和哪个数据库(我的Info表是在DPSL这个数据库中的),并测试一下能否联系上.如图:

          第九步,选择一个表,模型命名空间一般会自动帮我们选择,一般来说也不用我们改,如图:

         就这样就可以跟我们在文件里跟我们生成一个可视的一个模型了,其与数据库中的数据字段都是一样的.如图:

        

        第十步,在Controllel中选择添加一个控制器,如图:  

          最后一步呢,就是在控制器里写上控制器名字,此处我是将其改成了名叫Info的控制器,模板就选择有读写操作的(如果不选择有读写操作的就实现不了了),2013的话会有六个供你选择,12则会有三个让你选择,数据上下文选择的就是这个服务中的数据库的名字加Entities,会有下拉框让你选择的.模型类就是这个表的名字,依旧会有下拉框供你选择.这个就不要弄混了.当然在进行这一步的时候,一定要把整个项目先生成一下,否则是没有模型和数据上下文供你选择的.就这样就自动会有五个页面帮你自动生成了.如图:

    列表页面是这样的:

         且附上其页面的代码:

     1 @model IEnumerable<JustTest.Models.Info>
     2 
     3 @{
     4     ViewBag.Title = "Index";
     5 }
     6 
     7 <h2>Index</h2>
     8 
     9 <p>
    10     @Html.ActionLink("Create New", "Create")
    11 </p>
    12 <table>
    13     <tr>
    14         <th>
    15             @Html.DisplayNameFor(model => model.name)
    16         </th>
    17         <th>
    18             @Html.DisplayNameFor(model => model.age)
    19         </th>
    20         <th>
    21             @Html.DisplayNameFor(model => model.sex)
    22         </th>
    23         <th></th>
    24     </tr>
    25 
    26 @foreach (var item in Model) {
    27     <tr>
    28         <td>
    29             @Html.DisplayFor(modelItem => item.name)
    30         </td>
    31         <td>
    32             @Html.DisplayFor(modelItem => item.age)
    33         </td>
    34         <td>
    35             @Html.DisplayFor(modelItem => item.sex)
    36         </td>
    37         <td>
    38             @Html.ActionLink("Edit", "Edit", new { id=item.id }) |
    39             @Html.ActionLink("Details", "Details", new { id=item.id }) |
    40             @Html.ActionLink("Delete", "Delete", new { id=item.id })
    41         </td>
    42     </tr>
    43 }
    44 
    45 </table>
    列表页面的代码

         

    增加的页面将会是这样(另外附上此页面的代码):

        

     1 @model JustTest.Models.Info
     2 
     3 @{
     4     ViewBag.Title = "Create";
     5 }
     6 
     7 <h2>Create</h2>
     8 
     9 @using (Html.BeginForm()) {
    10     @Html.AntiForgeryToken()
    11     @Html.ValidationSummary(true)
    12 
    13     <fieldset>
    14         <legend>Info</legend>
    15 
    16         <div class="editor-label">
    17             @Html.LabelFor(model => model.name)
    18         </div>
    19         <div class="editor-field">
    20             @Html.EditorFor(model => model.name)
    21             @Html.ValidationMessageFor(model => model.name)
    22         </div>
    23 
    24         <div class="editor-label">
    25             @Html.LabelFor(model => model.age)
    26         </div>
    27         <div class="editor-field">
    28             @Html.EditorFor(model => model.age)
    29             @Html.ValidationMessageFor(model => model.age)
    30         </div>
    31 
    32         <div class="editor-label">
    33             @Html.LabelFor(model => model.sex)
    34         </div>
    35         <div class="editor-field">
    36             @Html.EditorFor(model => model.sex)
    37             @Html.ValidationMessageFor(model => model.sex)
    38         </div>
    39 
    40         <p>
    41             <input type="submit" value="Create" />
    42         </p>
    43     </fieldset>
    44 }
    45 
    46 <div>
    47     @Html.ActionLink("Back to List", "Index")
    48 </div>
    49 
    50 @*@section Scripts {..
    51     @Scripts.Render("~/bundles/jqueryval")//此三行代码为我手动注释,如不注释会报那个错.
    52 }*@
    增加页面的代码

         

     修改页面将会是这样(且附上代码):

      

     1 @model JustTest.Models.Info
     2 
     3 @{
     4     ViewBag.Title = "Edit";
     5 }
     6 
     7 <h2>Edit</h2>
     8 
     9 @using (Html.BeginForm()) {
    10     @Html.AntiForgeryToken()
    11     @Html.ValidationSummary(true)
    12 
    13     <fieldset>
    14         <legend>Info</legend>
    15 
    16         @Html.HiddenFor(model => model.id)
    17 
    18         <div class="editor-label">
    19             @Html.LabelFor(model => model.name)
    20         </div>
    21         <div class="editor-field">
    22             @Html.EditorFor(model => model.name)
    23             @Html.ValidationMessageFor(model => model.name)
    24         </div>
    25 
    26         <div class="editor-label">
    27             @Html.LabelFor(model => model.age)
    28         </div>
    29         <div class="editor-field">
    30             @Html.EditorFor(model => model.age)
    31             @Html.ValidationMessageFor(model => model.age)
    32         </div>
    33 
    34         <div class="editor-label">
    35             @Html.LabelFor(model => model.sex)
    36         </div>
    37         <div class="editor-field">
    38             @Html.EditorFor(model => model.sex)
    39             @Html.ValidationMessageFor(model => model.sex)
    40         </div>
    41 
    42         <p>
    43             <input type="submit" value="Save" />
    44         </p>
    45     </fieldset>
    46 }
    47 
    48 <div>
    49     @Html.ActionLink("Back to List", "Index")
    50 </div>
    51 
    52 @*@section Scripts {
    53     @Scripts.Render("~/bundles/jqueryval")此三行代码为我手动注释,如不手动注释会报错.
    54 }*@
    修改的代码

           

    删除的页面将会是这样(依旧附上代码):

     1 @model JustTest.Models.Info
     2 
     3 @{
     4     ViewBag.Title = "Delete";
     5 }
     6 
     7 <h2>Delete</h2>
     8 
     9 <h3>Are you sure you want to delete this?</h3>
    10 <fieldset>
    11     <legend>Info</legend>
    12 
    13     <div class="display-label">
    14          @Html.DisplayNameFor(model => model.name)
    15     </div>
    16     <div class="display-field">
    17         @Html.DisplayFor(model => model.name)
    18     </div>
    19 
    20     <div class="display-label">
    21          @Html.DisplayNameFor(model => model.age)
    22     </div>
    23     <div class="display-field">
    24         @Html.DisplayFor(model => model.age)
    25     </div>
    26 
    27     <div class="display-label">
    28          @Html.DisplayNameFor(model => model.sex)
    29     </div>
    30     <div class="display-field">
    31         @Html.DisplayFor(model => model.sex)
    32     </div>
    33 </fieldset>
    34 @using (Html.BeginForm()) {
    35     @Html.AntiForgeryToken()
    36     <p>
    37         <input type="submit" value="Delete" /> |
    38         @Html.ActionLink("Back to List", "Index")
    39     </p>
    40 }
    删除页面的代码

       

      再附上详情页和控制器的代码,图就不传了.

     1 @model JustTest.Models.Info
     2 
     3 @{
     4     ViewBag.Title = "Details";
     5 }
     6 
     7 <h2>Details</h2>
     8 
     9 <fieldset>
    10     <legend>Info</legend>
    11 
    12     <div class="display-label">
    13          @Html.DisplayNameFor(model => model.name)
    14     </div>
    15     <div class="display-field">
    16         @Html.DisplayFor(model => model.name)
    17     </div>
    18 
    19     <div class="display-label">
    20          @Html.DisplayNameFor(model => model.age)
    21     </div>
    22     <div class="display-field">
    23         @Html.DisplayFor(model => model.age)
    24     </div>
    25 
    26     <div class="display-label">
    27          @Html.DisplayNameFor(model => model.sex)
    28     </div>
    29     <div class="display-field">
    30         @Html.DisplayFor(model => model.sex)
    31     </div>
    32 </fieldset>
    33 <p>
    34     @Html.ActionLink("Edit", "Edit", new { id=Model.id }) |
    35     @Html.ActionLink("Back to List", "Index")
    36 </p>
    详情页的代码
      1 using System;
      2 using System.Collections.Generic;
      3 using System.Data;
      4 using System.Data.Entity;
      5 using System.Linq;
      6 using System.Web;
      7 using System.Web.Mvc;
      8 using MvcApplication3.Models;
      9 
     10 namespace MvcApplication3.Controllers
     11 { 
     12     public class InfoController : Controller
     13     {
     14         private DPSLEntities db = new DPSLEntities();
     15 
     16         //
     17         // GET: /Info/
     18 
     19         public ViewResult Index()
     20         {
     21             return View(db.Info.ToList());
     22         }
     23 
     24         //
     25         // GET: /Info/Details/5
     26 
     27         public ViewResult Details(int id)
     28         {
     29             Info info = db.Info.Find(id);
     30             return View(info);
     31         }
     32 
     33         //
     34         // GET: /Info/Create
     35 
     36         public ActionResult Create()
     37         {
     38             return View();
     39         } 
     40 
     41         //
     42         // POST: /Info/Create
     43 
     44         [HttpPost]
     45         public ActionResult Create(Info info)
     46         {
     47             if (ModelState.IsValid)
     48             {
     49                 db.Info.Add(info);
     50                 db.SaveChanges();
     51                 return RedirectToAction("Index");  
     52             }
     53 
     54             return View(info);
     55         }
     56         
     57         //
     58         // GET: /Info/Edit/5
     59  
     60         public ActionResult Edit(int id)
     61         {
     62             Info info = db.Info.Find(id);
     63             return View(info);
     64         }
     65 
     66         //
     67         // POST: /Info/Edit/5
     68 
     69         [HttpPost]
     70         public ActionResult Edit(Info info)
     71         {
     72             if (ModelState.IsValid)
     73             {
     74                 db.Entry(info).State = EntityState.Modified;
     75                 db.SaveChanges();
     76                 return RedirectToAction("Index");
     77             }
     78             return View(info);
     79         }
     80 
     81         //
     82         // GET: /Info/Delete/5
     83  
     84         public ActionResult Delete(int id)
     85         {
     86             Info info = db.Info.Find(id);
     87             return View(info);
     88         }
     89 
     90         //
     91         // POST: /Info/Delete/5
     92 
     93         [HttpPost, ActionName("Delete")]
     94         public ActionResult DeleteConfirmed(int id)
     95         {            
     96             Info info = db.Info.Find(id);
     97             db.Info.Remove(info);
     98             db.SaveChanges();
     99             return RedirectToAction("Index");
    100         }
    101 
    102         protected override void Dispose(bool disposing)
    103         {
    104             db.Dispose();
    105             base.Dispose(disposing);
    106         }
    107     }
    108 }
    控制器的代码

       然后就这样搞定了.然后最好还是能创建空控制器把这个DEMO搞定.因为这样做在开发中想必是用不到的。而是要在这个不用写代码的DEMO里学到东西。另外我这边用13创建的时候出了点小问题,在创建链接和增加链接的时候会报一个错.是说,"当前上下文中不存在名称"Scripts".然后我将这两个页面最后的代码删除了,也就没有这个错了.如果有大神看到了这里且知道原因的话,烦请告之.共同进步.

  • 相关阅读:
    xfce4-windowck-plugin的替代品
    git使用Beyond Compare作为diff和merge工具
    Visual Studio设置多个快捷键
    scrapy参数-COOKIES_ENABLED 最权威解释, 帮你避坑
    Linux基础使用
    python 所有的库整理
    Nginx配置详解
    15个常用的javaScript正则表达式
    Redis开发建议
    mysql 同步大量数据小技巧
  • 原文地址:https://www.cnblogs.com/anmutu/p/3602519.html
Copyright © 2011-2022 走看看