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

[经验分享] Asp.Net MVC3网站并成功的连接了MongoDB

[复制链接]

尚未签到

发表于 2015-7-7 12:03:24 | 显示全部楼层 |阅读模式
  我们已经创建了一个简单的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-84100-1-1.html 上篇帖子: MongoDB初体验 下篇帖子: mongoDB之监控工具mongotop
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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