热门标签 | 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 

    推荐阅读
    • 本文将介绍一种扩展的ASP.NET MVC三层架构框架,并通过使用StructureMap实现依赖注入,以降低代码间的耦合度。该方法不仅能够提高代码的可维护性和可测试性,还能增强系统的灵活性和扩展性。通过具体实践案例,详细阐述了如何在实际开发中有效应用这一技术。 ... [详细]
    • 利用ViewComponents在Asp.Net Core中构建高效分页组件
      通过运用 ViewComponents 技术,在 Asp.Net Core 中实现了高效的分页组件开发。本文详细介绍了如何通过创建 `PaginationViewComponent` 类并利用 `HelloWorld.DataContext` 上下文,实现对分页参数的定义与管理,从而提升 Web 应用程序的性能和用户体验。 ... [详细]
    • 随着越来越多的应用程序采用JSON格式作为响应数据,基于Spring Framework构建的服务端应用也广泛采用了这一实践。本文将详细介绍如何在Spring 4.x版本的MVC框架中配置和实现HTTP请求返回JSON数据流,涵盖相关配置、依赖管理和代码示例,帮助开发者高效地实现这一功能。 ... [详细]
    • 为了优化直播应用底部聊天框的弹出机制,确保在不同设备上的布局稳定性和兼容性,特别是在配备虚拟按键的设备上,我们对用户交互流程进行了调整。首次打开应用时,需先点击首个输入框以准确获取键盘高度,避免直接点击第二个输入框导致的整体布局挤压问题。此优化通过调整 `activity_main.xml` 布局文件实现,确保了更好的用户体验和界面适配。 ... [详细]
    • 深入解析 Spring MVC 的核心原理与应用实践
      本文将详细探讨Spring MVC的核心原理及其实际应用,首先从配置web.xml文件入手,解析其在初始化过程中的关键作用,接着深入分析请求处理流程,包括控制器、视图解析器等组件的工作机制,并结合具体案例,展示如何高效利用Spring MVC进行开发,为读者提供全面的技术指导。 ... [详细]
    • 本文深入分析了Django框架中模型应用与非模型应用的区别与应用场景,详细对比了两者在数据处理、性能表现及开发灵活性等方面的特点。同时,文章还介绍了如何在视图函数中有效利用这些特性,结合PostgreSQL、MySQL、SQLite3和Oracle等不同数据库的配置与使用方法,为开发者提供了全面的参考指南。 ... [详细]
    • 本文深入探讨了在使用 Spring Cloud Feign 时遇到的 `java.lang.IllegalStateException` 异常,具体表现为方法体参数过多的问题。通过详细分析异常原因和代码结构,提出了有效的解决方案,帮助开发者更好地理解和处理这一常见问题。 ... [详细]
    • 深入解析 iOS Objective-C 中的对象内存对齐规则及其优化策略
      深入解析 iOS Objective-C 中的对象内存对齐规则及其优化策略 ... [详细]
    • 在单个图表中实现饼图与条形图的精准对齐 ... [详细]
    • 本文深入探讨了NDK与JNI技术在实际项目中的应用及其学习路径。通过分析工程目录结构和关键代码示例,详细介绍了如何在Android开发中高效利用NDK和JNI,实现高性能计算和跨平台功能。同时,文章还提供了从基础概念到高级实践的系统学习指南,帮助开发者快速掌握这些关键技术。 ... [详细]
    • 表面缺陷检测数据集综述及GitHub开源项目推荐
      本文综述了表面缺陷检测领域的数据集,并推荐了多个GitHub上的开源项目。通过对现有文献和数据集的系统整理,为研究人员提供了全面的资源参考,有助于推动该领域的发展和技术进步。 ... [详细]
    • NOI题库(noi.openjudge.cn):1.7 编程基础之字符串 T31 至 T35 详解与解析
      T31至T35题目详细解析了字符串处理的基础编程技巧。其中,T31涉及P型编码,要求将一个仅包含数字字符的字符串转换为特定格式的编码串。例如,输入字符串“111223”应输出相应的P型编码结果。其他题目则涵盖了字符串的多种操作和变换方法,包括但不限于子串提取、字符替换和模式匹配等,旨在提升编程者对字符串处理的综合能力。 ... [详细]
    • 如何在Android应用中设计和实现专业的启动欢迎界面(Splash Screen)
      在Android应用开发中,设计与实现一个专业的启动欢迎界面(Splash Screen)至关重要。尽管Android设计指南对使用Splash Screen的态度存在争议,但一个精心设计的启动界面不仅能提升用户体验,还能增强品牌识别度。本文将探讨如何在遵循最佳实践的同时,通过技术手段实现既美观又高效的启动欢迎界面,包括加载动画、过渡效果以及性能优化等方面。 ... [详细]
    • SpringBoot启动脚本详解:BAT文件应用与基础入门指南(SpringBoot系列第1篇)
      如果你还在为SSM框架的复杂搭建过程和繁琐的配置文件而烦恼,那么SpringBoot将是你的一大福音。作为SpringBoot系列的第一篇文章,本文详细介绍了如何使用BAT文件来启动SpringBoot应用,并提供了基础入门指南,帮助开发者快速上手,简化开发流程。 ... [详细]
    • 开发笔记:校园商铺系统中店铺注册功能模块的Controller层优化与重构
      开发笔记:校园商铺系统中店铺注册功能模块的Controller层优化与重构 ... [详细]
    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社区 版权所有