http://www.cnblogs.com/leo_wl/archive/2012/02/10/2345890.html

我们已经创建了一个简单的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:  <h2>
   6:      Index</h2>
   7:  <ul>
   8:      @foreach (var testData in Model)
   9:      {
  10:          <li>
  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]);<br />                            
  22:              }
  23:          }                
  24:                  <a href="/Home/Delete/@id">Delete</a> <a href="/Home/Edit/@id">Edit</a> <a href="/Home/Details/@id">Details</a>
  25:              }
  26:          </li>
  27:      }
  28:  </ul>
  29:  <a href="/Home/Create">Create New</a>

总体来说,Razor引擎的代码写起来还是流畅+愉快。有一个简单的校技巧,想要链接目录从网站根目录开始的话,要用“/”开头。

显示效果如下:

接下来我们就分别来实现删除,编辑和查看功能。

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:  <h2>
   6:      Edit</h2>
   7:  <form method="post" action="/Home/Edit/@Model["_id"].ToString()">
   8:      Name:
   9:      <input name="name" type="text" value="@Model["name"]" /><br />
  10:      Age:
  11:      <input name="age" type="text" value="@Model["age"]" /><br />
  12:      Gender:
  13:      <input name="gender" type="text" value="@Model["gender"]" /><br />
  14:      Married:
  15:      <input name="married" type="text" value="@Model["married"]" /><br />
  16:      <input type="submit" value="Update" />
  17:      <a href="/Home/Index">Cancel</a>
  18:  </form>

\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.cnblogs.com/pandora/MvcApplication1_CRUD.zip

【转载】Asp.Net MVC3网站并成功的连接了MongoDB相关推荐

  1. 在没有安装有mvc3的主机上部署asp.net mvc3网站,需要包含的DLL文件

    1.在没有安装有mvc3的主机上部署asp.net mvc3网站,需要包含的DLL文件. microsoft.web.infrastructure.dll system.web.helpers.dll ...

  2. asp.net mvc3 网站退出系统后使用浏览器的回退按钮依然能返回到内容页的处理方法...

    由于一般情况下点击浏览器的回退按钮显示的内容是浏览器缓存内容,不会重新向服务器发起请求, 所以后台的验证代码就不起作用了,这样就有可能在用户退出的情况下依然可以可以看到系统内容 要想解决此问题,可以取 ...

  3. Asp.Net MVC3.0网站统计登录认证的在线人数

    前言 对于一个网站来说,统计在线人数是一个很重要的工作.平时也发现很多的网站论坛等都有在线人数的显示.对于一个网站如果在线人数很多,用户看到了这么个数字也是很了不起的事情.由于之前对于这个知识点只是知 ...

  4. 网站优化记录-通过命令预编译Asp.net 网站,成功优化到毫秒级别。

    在去年一次项目上线时发现部署的站点首次访问跟回收后响应特别慢,每次都在3秒以内.(使用的是vs工具预编译的方式发布),在随后找到解决办法是通过命令预编译Asp.net 网站,成功解决站点响应在毫秒级别 ...

  5. Asp.net MVC3 一语道破

    Asp.net MVC前两年就听说了,但一直没有去用,中间只是粗略的了解了下,在前段时间做的栏目改版时才真正的去学习和使用--刚开始学,对其'路由'和请求解析执行的过程感觉比较神秘,但随着项目中的应用 ...

  6. ASP.NET MVC3书店--第七节 用户及身份验证(转)

    http://blog.sina.com.cn/s/blog_6ad539a90100r7jx.html 现在的问题是任何用户都可以通过StoreManager控制器来访问我们的书籍管理页面.接下来让 ...

  7. [译]Professional ASP.NET MVC3(01)-Chapter 1:Getting Started(上)

    本章概要 理解ASP.NET MVC ASP.NET MVC3 预览 如何创建MVC3应用程序 MVC应用程序结构 本章首先简要介绍ASP.NET MVC, 解释它怎样适应ASP.NET MVC的历史 ...

  8. asp.net mvc3.0安装失败之终极解决方案

    安装失败截图 原因分析 因为vs10先安装了sp1补丁,然后安装的mvc3.0,某些文件被sp1补丁更改,导致"VS10-KB2483190-x86.exe"安装不了,造成安装失败 ...

  9. ASP.NET MVC3 上传头像图片并截图

    关于上传头像并且截图网上应该有很多资料,大多都是JQuery插件,用起来不是很方便 本文所介绍的方法将快速完成一个"上传头像图片并截图",只需要修改少量的代码 我们先来看看完成后的 ...

最新文章

  1. 图像处理中的Mask是什么
  2. 如何利用数据来支撑设计?
  3. mysql connector 5.5_升级mysql-connector 5到8遇到的问题
  4. python实例属性与类属性_Python中的类属性和实例属性引发的一个坑-续
  5. java audiorecord_Android 录音实现(AudioRecord)
  6. C++第五章课后习题13
  7. mysql s x锁_mysql 的S 锁和X锁的区别
  8. python中文字体奇怪_“matplotlib”中对字体设置的奇怪响应
  9. 90后程序员程广坤教你零基础自学编程,用这6种方法就够了!
  10. 我的博客文章快速索引
  11. web基础_$POST 在线http接口测试网址
  12. 用PyTorch完成手写数字识别
  13. Excel表格中两列数据对比,找出异同的数据
  14. 为啥海康摄像头网页无法预览
  15. 万网域名查询是否注册接口
  16. Linux I/O编程 实验内容
  17. Lect6_Value_Function_Approximation
  18. 二、DMSP/OLS、NPP/VIIRS等夜间灯光数据能源碳排放空间化——灯光指数计算(一)
  19. 【超级详细的Mysql入门到进阶】
  20. 重庆php牛人,惊掉下巴!铅笔芯刻“牛”?这些牛人够牛气

热门文章

  1. okhttp请求文件异常解决方法
  2. 于XAML导入命名空间的代码
  3. 配置2008的网络与工作组环境
  4. 防止email被抓取的两种方法(js和css)
  5. socket io与vue-cli的结合使用
  6. elasticsearch数据长期保存的方案
  7. Spring4-HelloWorld
  8. 11.2.0.2 asmcmd lsdg show incorrect diskgroup number
  9. jQuery 是为事件处理特别设计的。
  10. 【XXX贷】2014年10月XX日发标预告