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测试数据/mota/MvcApplication1.zip
大家可以下载过去看一下
---------------------------
修正
1.TModel.GetType() 应为 TModel.GetType().Name
2.基本控制器中我未写资源释放相关代码,见谅,我仅此提供一种新的思路与想法.
作者: Leo_wl
出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息查看更多关于MVC 3中的新思考.通用模块完成增删改查功能的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did47316