好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Asp.Net MVC3网站并成功的连接了MongoDB

Asp.Net MVC3网站并成功的连接了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:   <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的高级功能,敬请期待。

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

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于Asp.Net MVC3网站并成功的连接了MongoDB的详细内容...

  阅读:46次

上一篇: .NET插件系统

下一篇:sqlservr 命令行启动