设为首页 收藏本站
查看: 1783|回复: 0

[经验分享] MongoDB on Asp.Net MVC3–CRUD

[复制链接]

尚未签到

发表于 2015-7-6 05:02:11 | 显示全部楼层 |阅读模式
  上回我们已经创建了一个简单的Asp.Net MVC3网站并成功的连接了MongoDB。但只实现了创建和显示的功能。本回实现了完整的增删改查。
  
  创建的部分,上次的代码中存在一些错误,造成了每个属性都会被创建为单独的一条记录,这并不是我们期待的结果。更改如下:
  \Controllers\HomeController.cs

   1:          [HttpPost]   2:          public ActionResult Create(FormCollection collection)   3:          {   4:              try   5:              {   6:                  var db = GetDB();   7:                  var doc = new BsonDocument();   8:      9:                  foreach (var key in collection.AllKeys)  10:                  {  11:                      doc.Add(new BsonElement(key, collection[key]));  12:                  }  13:     14:                  db["testTable"].Insert(doc);  15:                  return RedirectToAction("Index");  16:              }  17:              catch  18:              {  19:                  return View();  20:              }  21:          }  
其实这样写并不安全,会把所有从页面POST过来的内容都作为属性创建并保存,但是简单啦。我们注意力主要集中在MongoDB的使用,安全性并不在考虑范围内。
  显示的部分,也做了相应的修改,使其更符合Asp.Net MVC3 Razor引擎的规范:
  \Controllers\HomeController.cs


   1:          public ActionResult Index()   2:          {   3:              var testTable = GetDB()["testTable"].FindAll();   4:              return View(testTable);   5:          }  \Views\Home\Index.cshtml


   1:  @{   2:      ViewBag.Title = "Index";   3:      Layout = "~/Views/Shared/_Layout.cshtml";       4:  }   5:     6:      Index   7:     8:      @foreach (var testData in Model)   9:      {  10:            11:              @{  12:          var id = string.Empty;  13:          foreach (var property in testData.Names)  14:          {  15:              if (property == "_id")  16:              {  17:                  id = testData[property].ToString();  18:              }  19:              else  20:              {  21:                  @string.Format("{0}:{1}", property, testData[property]);                              22:              }  23:          }                  24:                  Delete Edit Details  25:              }  26:            27:      }  28:    29:  Create New  
总体来说,Razor引擎的代码写起来还是流畅+愉快。有一个简单的校技巧,想要链接目录从网站根目录开始的话,要用“/”开头。
  显示效果如下:
DSC0000.png
  接下来我们就分别来实现删除,编辑和查看功能。
  Details链接:
  \Controllers\HomeController.cs


   1:          public ActionResult Details(string id)   2:          {   3:              try   4:              {   5:                  var db = GetDB();   6:                  var doc = db["testTable"].Find(Query.EQ("_id", new BsonObjectId(id))).First();                   7:                  return View(doc);   8:              }   9:              catch  10:              {  11:                  return View();  12:              }              13:          }  
Edit页面:
  \Controllers\HomeController.cs


   1:          public ActionResult Edit(string id)   2:          {   3:              var db = GetDB();   4:              var doc = db["testTable"].Find(Query.EQ("_id", new BsonObjectId(id))).First();   5:              return View(doc);   6:          }  \Home\Edit.cshtml


   1:  @{   2:      ViewBag.Title = "Edit";   3:      Layout = "~/Views/Shared/_Layout.cshtml";   4:  }   5:     6:      Edit   7:     8:      Name:   9:        10:      Age:  11:        12:      Gender:  13:        14:      Married:  15:        16:        17:      Cancel  18:    \Controllers\HomeController.cs


   1:          [HttpPost]   2:          public ActionResult Edit(string id, FormCollection collection)   3:          {   4:              try   5:              {   6:                  var db = GetDB();   7:                  var update = new UpdateBuilder();   8:                  foreach (string key in collection.Keys)   9:                  {  10:                      update.Set(key, collection[key]);  11:                  }  12:     13:                  db["testTable"].Update(Query.EQ("_id", new BsonObjectId(id)), update);  14:                  return RedirectToAction("Index");  15:              }  16:              catch  17:              {  18:                  return View();  19:              }  20:          }  删除功能:
  \Controllers\HomeController.cs


   1:          public ActionResult Delete(string id)   2:          {   3:              try   4:              {   5:                  var db = GetDB();   6:                  db["testTable"].Remove(Query.EQ("_id", new BsonObjectId(id)));   7:                  return RedirectToAction("Index");   8:              }   9:              catch  10:              {  11:                  return View();  12:              }  13:          }

Global.asax.cx也可以改回Index开始:

   1:              routes.MapRoute(   2:                  "Default", // Route name   3:                  "{controller}/{action}/{id}", // URL with parameters   4:                  new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults   5:              );  
  搞定。
  不用设计数据库好爽啊。。想怎么插就怎么插。。。无Schema好爽啊!Razor基本很人性化,缺点很少。
  不过感觉MongoDB关方的Connector功力比较弱,不支持Linq也就罢了,implicit也不实现,无法隐式转化格式,写起来很是别扭,不够流畅。
  
  接下来准备研究一下MongoDB的高级功能,敬请期待。
  完整代码下载: http://files.iyunv.com/pandora/MvcApplication1_CRUD.zip

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-83450-1-1.html 上篇帖子: Mongodb源码分析--Replication之主从模式--Slave 下篇帖子: mongoose
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表