zoukankan      html  css  js  c++  java
  • 菜鸟级三层框架(EF+MVC)项目实战之 系列四 UI层ASP.NET MVC实现CRUD

    概述:该节主要目的是通过ASP.Net MVC3.0快速实现增删改查

    一、创建MVC项目

          1.1、在解决方案中添加MVC3.0项目

                  vs2010中没有自带MVC3.0,下载:http://www.asp.net/mvc/mvc3

                

                 在这里我们选择“空”模版

               

          1.2、添加相关引用

               1)由于使用的EF因此需要添加一坨相关引用,我们可以在MVC项目中的Model中添加一个ASP.NET 实体数据模型。此时VS会帮我们引用相应的程序集,完成后我再

                    删除它。

               2) 再引用我们的程序集,Cnblogs.Rdst.IBLL、Cnblogs.Rdst.BLL、Cnblogs.Rdst.Domain

                    

                    

                3、配置连接字符串

                    将Cnblogs.Rdst.Domain中的App.Config文件里的

    <connectionStrings>
        <add name="ModelContainer" connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=.;initial catalog=Cnblogs-Rdst;persist security info=True;user id=sa;password=Hell0F18;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
      </connectionStrings>
    拷贝到MVC项目中的web.config里的
    <configuration>节点下,如下图:

    
    

    二、添加UserInfo控制器

          2.1、在创建控制器前我们需要将解决方案编译一下。

          2.2、回到MVC项目中右键点击Controllers,创建一个名为UserInfo的控制器

               

          2.3、“模型类”选择UserInfo实体类,“数据上下文”选择ModelContainer实体上下文,在此我们选择Razor实体引擎。

               

    三、快速实现CRUD

         3.1 此时VS会帮我们生成UserInfo和View下的一些页面

             

        3.2 以下代码是UserInfoController控制器中增删改查的代码,其中注释掉的代码是vs自动生成的。

            

      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 Cnblogs.Rdst.Domain;
      9 using Cnblogs.Rdst.IBLL;
     10 using Cnblogs.Rdst.BLL;
     11 
     12 namespace Cnblogs.Rdst.Mvc.Controllers
     13 { 
     14     public class UserInfoController : Controller
     15     {
     16         //private ModelContainer db = new ModelContainer();
     17         IUserInfoService db = new UserInfoService();
     18 
     19         //
     20         // GET: /UserInfo/
     21 
     22         public ViewResult Index()
     23         {
     24            // return View(db.UserInfo.ToList());
     25             return View(db.LoadEntites(u => true));
     26         }
     27 
     28         //
     29         // GET: /UserInfo/Details/5
     30 
     31         public ViewResult Details(int id)
     32         {
     33             //UserInfo userinfo = db.UserInfo.Single(u => u.ID == id);
     34             UserInfo userinfo = db.LoadEntites(u => u.ID == id).FirstOrDefault();//FirstOrDefault()获取集合第一项
     35             return View(userinfo);
     36         }
     37 
     38         //
     39         // GET: /UserInfo/Create
     40 
     41         public ActionResult Create()
     42         {
     43             return View();
     44         } 
     45 
     46         //
     47         // POST: /UserInfo/Create
     48 
     49         [HttpPost]
     50         public ActionResult Create(UserInfo userinfo)
     51         {
     52             if (ModelState.IsValid)
     53             {
     54                 //db.UserInfo.AddObject(userinfo);
     55                 //db.SaveChanges();
     56                 db.AddEntity(userinfo);
     57                 return RedirectToAction("Index");  
     58             }
     59 
     60             return View(userinfo);
     61         }
     62         
     63         //
     64         // GET: /UserInfo/Edit/5
     65  
     66         public ActionResult Edit(int id)
     67         {
     68             //UserInfo userinfo = db.UserInfo.Single(u => u.ID == id);
     69             UserInfo userinfo = db.LoadEntites(u=>u.ID==id).FirstOrDefault();
     70             return View(userinfo);
     71         }
     72 
     73         //
     74         // POST: /UserInfo/Edit/5
     75 
     76         [HttpPost]
     77         public ActionResult Edit(UserInfo userinfo)
     78         {
     79             if (ModelState.IsValid)
     80             {
     81                // db.UserInfo.Attach(userinfo);
     82                // db.ObjectStateManager.ChangeObjectState(userinfo, EntityState.Modified);
     83                // db.SaveChanges();
     84                 db.UpdateEntity(userinfo);
     85                 return RedirectToAction("Index");
     86             }
     87             return View(userinfo);
     88         }
     89 
     90         //
     91         // GET: /UserInfo/Delete/5
     92  
     93         public ActionResult Delete(int id)
     94         {
     95            // UserInfo userinfo = db.UserInfo.Single(u => u.ID == id);
     96             UserInfo userinfo = db.LoadEntites(u => u.ID == id).FirstOrDefault();
     97             return View(userinfo);
     98         }
     99 
    100         //
    101         // POST: /UserInfo/Delete/5
    102 
    103         [HttpPost, ActionName("Delete")]
    104         public ActionResult DeleteConfirmed(int id)
    105         {            
    106             //UserInfo userinfo = db.UserInfo.Single(u => u.ID == id);
    107            // db.UserInfo.DeleteObject(userinfo);
    108            // db.SaveChanges();
    109             var userInfo=db.LoadEntites(u=>u.ID==id).FirstOrDefault();
    110             db.DelEntity(userInfo);
    111             return RedirectToAction("Index");
    112         }
    113 
    114         //protected override void Dispose(bool disposing)
    115         //{
    116         //    db.Dispose();
    117         //    base.Dispose(disposing);
    118         //}
    119     }
    120 }

          3.3、接下来我们在Global.asax文件中配置一下路由,将controller = "Home"更改为controller = "UserInfo"

                

            

            3.4、将Cnblogs.Rdst.Mvc项目设置为启动项,在点击启动调试。

                   在此由于涉及到表外键关系,我们需要将映射文件中的外键改为可空,在网页上才可以进行新增操作。

           

                      

         至此,面向对象、面向接口 入门级三层架构项目就已结束了,希望对大家有所帮助!

         源码下载

                  

  • 相关阅读:
    解决vs code just-in-time报错的方法
    c++ 右值引用
    c++11 知识点
    ip路由名词介绍&琐碎知识
    第二次结对作业
    软工程第三次作业
    第二次作业
    软件工程第一次作业
    理解Object.defineProperty()
    concat()拷贝的局限性
  • 原文地址:https://www.cnblogs.com/rdst/p/2639098.html
Copyright © 2011-2022 走看看