好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

MVC 3中的新思考.通用模块完成增删改查功能

MVC 3中的新思考.通用模块完成增删改查功能

前言:

虽然.NET MVC给了我极大的方便,但是如果功能块多了,增删改查这些功能写写还是比较头疼的

所以我想了一个办法

通过继承公共模块的增删改查来实现自己的偷懒思想.

现在我给出通用公共部分代码

希望大家一起讨论这个功能的实现是否完美,还有资源耗费的相关问题.

  1   using   System;
   2   using   System.Collections.Generic;
   3   using   System.Linq;
   4   using   System.Web;
   5   using   System.Web.Mvc;
   6   using   System.ComponentModel;
   7   using   System.ComponentModel.DataAnnotations;
   8  
  9   namespace   Base
  10   {
  11       ///   <summary> 
 12       ///   基本模型 所有模型继承他
  13       ///   </summary> 
 14       public   class   BaseModel
  15       {
  16           [Key]
  17           public   long  Idx {  get ;  set  ; }
  18  
 19           public  DateTime EventDateTiem {  get ;  set  ; }
  20       }
  21  
 22  
 23       public   class  BaseController<T>  : Controller
  24           where  T : BaseModel,  new  ()
  25       {
  26           #region  私有变量
 27           private   class   Entities : System.Data.Entity.DbContext
  28           {
  29               public  System.Data.Entity.DbSet<T> TModel {  get ;  set  ; }
  30           }
  31           private  Entities db =  new   Entities();
  32           private  dynamic TModel =  new   T();
  33           #endregion 
 34  
 35           public   BaseController()
  36           {
  37           }
  38  
 39           #region  增删改查
 40           public   virtual  ActionResult View( int  Idx =  0  )
  41           {
  42               var  ViewModel = db.TModel.FirstOrDefault(p => p.Idx ==  Idx);
  43               return   View(ViewModel);
  44           }
  45  
 46           public   virtual   ActionResult Create()
  47           {
  48               return   View();
  49           }
  50  
 51           [HttpPost]
  52           public   virtual   ActionResult Create(T Model)
  53           {
  54  
 55               if   (ModelState.IsValid)
  56               {
  57                   db.TModel.Add(Model);
  58                   db.SaveChanges();
  59                   return  Redirect( "  /  "  + TModel.GetType().Name +  "  /List?Message=添加成功  "  );
  60               }
  61               return   View(Model);
  62           }
  63  
 64           public   virtual   string  Delete( int  Idx =  0  )
  65           {
  66               return   "  Delete  "  ;
  67           }
  68           #endregion 
 69  
 70       }
  71  }

以上我只实现了一个添加

在实际控制器中使用继承方法

 using   System;
  using   System.Collections.Generic;
  using   System.Linq;
  using   System.Web;
  using   System.Web.Mvc;

  namespace   MvcApplication1.Controllers
{
      public   class  HomeController : Base.BaseController<Models.TestTable> 
    {

    }
} 

将基本控制器继承给需要的Home控制器并且设定这个控制器所需要的模型对象

而如果你有特殊的需求定制某些操作可以通过

 using   System;
  using   System.Collections.Generic;
  using   System.Linq;
  using   System.Web;
  using   System.Web.Mvc;

  namespace   MvcApplication1.Controllers
{
      public   class  HomeController : Base.BaseController<Models.TestTable> 
    {
          public   override   ActionResult Create()
        {
              return   base  .Create();
        }
    }
} 

这样来实现.

我通过反射取得提交的模型名字

并且在控制器中加入了数据操作对象

操作可以通过后期继承进行个性化定制

不过这好像破坏了MVC的规范

大家都来发表一下自己的看法....

我写了个范例

https://files.cnblogs.com/mota/MvcApplication1.zip

大家可以下载过去看一下

---------------------------

修正

1.TModel.GetType() 应为 TModel.GetType().Name

2.基本控制器中我未写资源释放相关代码,见谅,我仅此提供一种新的思路与想法.

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于MVC 3中的新思考.通用模块完成增删改查功能的详细内容...

  阅读:46次