热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

成功实现Asp.NetMVC3网站与MongoDB数据库的高效集成

我们成功地构建了一个基于Asp.NETMVC3框架的网站,并实现了与MongoDB数据库的高效集成。此次更新不仅完善了基本的创建和显示功能,还全面实现了数据的增删改查操作。在创建功能方面,我们修复了之前代码中的错误,确保每个属性都能正确生成。此外,我们还对数据模型进行了优化,以提高系统的性能和稳定性。

我们已经创建了一个简单的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:                  "/Home/Delete/@id">Delete "/Home/Edit/@id">Edit "/Home/Details/@id">Details
      25:              }
      26:          
      27:      }
      28:  
      29:  "/Home/Create">Create New

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

    显示效果如下:

    image

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

    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:  "post" action="/Home/Edit/@Model["_id"].ToString()">
       8:      Name:
       9:      "name" type="text" value="@Model["name"]" />
      10:      Age:
      11:      "age" type="text" value="@Model["age"]" />
      12:      Gender:
      13:      "gender" type="text" value="@Model["gender"]" />
      14:      Married:
      15:      "married" type="text" value="@Model["married"]" />
      16:      "submit" value="Update" />
      17:      "/Home/Index">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的高级功能,敬请期待。

    完整代码下载: https://files.cnblogs.com/pandora/MvcApplication1_CRUD.zip 

    推荐阅读
    • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
      本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
    • 深入解析Spring启动过程
      本文详细介绍了Spring框架的启动流程,帮助开发者理解其内部机制。通过具体示例和代码片段,解释了Bean定义、工厂类、读取器以及条件评估等关键概念,使读者能够更全面地掌握Spring的初始化过程。 ... [详细]
    • 在尝试使用C# Windows Forms客户端通过SignalR连接到ASP.NET服务器时,遇到了内部服务器错误(500)。本文将详细探讨问题的原因及解决方案。 ... [详细]
    • 2018-2019学年第六周《Java数据结构与算法》学习总结
      本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
    • Coursera ML 机器学习
      2019独角兽企业重金招聘Python工程师标准线性回归算法计算过程CostFunction梯度下降算法多变量回归![选择特征](https:static.oschina.n ... [详细]
    • 本文介绍如何使用 Angular 6 的 HttpClient 模块来获取 HTTP 响应头,包括代码示例和常见问题的解决方案。 ... [详细]
    • 本文介绍了在Java环境中使用PDFBox和XPDF工具从PDF文件中提取文本内容的方法。重点讨论了处理中文字符集及解决相关错误的技术细节,特别是针对某些特定格式的PDF文件(如网上填写的报名表和下载的论文)遇到的问题及解决方案。 ... [详细]
    • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
    • 实用正则表达式有哪些
      小编给大家分享一下实用正则表达式有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下 ... [详细]
    • 主板IO用W83627THG,用VC如何取得CPU温度,系统温度,CPU风扇转速,VBat的电压. ... [详细]
    • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
    • Java项目分层架构设计与实践
      本文探讨了Java项目中应用分层的最佳实践,不仅介绍了常见的三层架构(Controller、Service、DAO),还深入分析了各层的职责划分及优化建议。通过合理的分层设计,可以提高代码的可维护性、扩展性和团队协作效率。 ... [详细]
    • 本文详细探讨了Android Activity中View的绘制流程和动画机制,包括Activity的生命周期、View的测量、布局和绘制过程以及动画对View的影响。通过实验验证,澄清了一些常见的误解,并提供了代码示例和执行结果。 ... [详细]
    • 深入解析Java虚拟机(JVM)架构与原理
      本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
    • 在PHP后端开发中遇到一个难题:通过第三方类文件发送短信功能返回的JSON字符串无法解析。本文将探讨可能的原因并提供解决方案。 ... [详细]
    author-avatar
    书友80922185
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有