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

    推荐阅读
    • PHP 编程疑难解析与知识点汇总
      本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
    • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
    • Struts与Spring框架的集成指南
      本文详细介绍了如何将Struts和Spring两个流行的Java Web开发框架进行整合,涵盖从环境配置到代码实现的具体步骤。 ... [详细]
    • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
      本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
    • springMVC JRS303验证 ... [详细]
    • 本文探讨了2019年前端技术的发展趋势,包括工具化、配置化和泛前端化等方面,并提供了详细的学习路线和职业规划建议。 ... [详细]
    • Asp.net MVC 中 Bundle 配置详解:合并与压缩 JS 和 CSS 文件
      本文深入探讨了 Asp.net MVC 中如何利用 Bundle 功能来合并和压缩 JavaScript 和 CSS 文件,提供了详细的配置步骤和示例代码,适合开发人员参考学习。 ... [详细]
    • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
    • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
    • This guide provides a comprehensive step-by-step approach to successfully installing the MongoDB PHP driver on XAMPP for macOS, ensuring a smooth and efficient setup process. ... [详细]
    • 深入解析 Apache Shiro 安全框架架构
      本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
    • 本文介绍了如何利用MongoDB的$exists操作符在Java应用程序中检查特定字段是否存在于文档中,包括示例代码和解释。 ... [详细]
    • MySQL锁机制详解
      本文深入探讨了MySQL中的锁机制,包括表级锁、行级锁以及元数据锁,通过实例详细解释了各种锁的工作原理及其应用场景。同时,文章还介绍了如何通过锁来优化数据库性能,避免常见的并发问题。 ... [详细]
    • 本文探讨如何利用Java反射技术来模拟Webwork框架中的URL解析过程。通过这一实践,读者可以更好地理解Webwork及其后续版本Struts2的工作原理,尤其是它们在MVC架构下的角色。 ... [详细]
    • 利用GitHub热门资源,成功斩获阿里、京东、腾讯三巨头Offer
      Spring框架作为Java生态系统中的重要组成部分,因其强大的功能和灵活的扩展性,被广泛应用于各种规模的企业级应用开发中。本文将通过一份在GitHub上获得极高评价的Spring全家桶文档,探讨如何掌握Spring框架及其相关技术,助力职业发展。 ... [详细]
    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社区 版权所有