上回我们已经创建了一个简单的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: Delete Edit Details 25: } 26: 27: } 28: 29: Create New
总体来说,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: 6: Edit 7: 8: Name: 9: 10: Age: 11: 12: Gender: 13: 14: Married: 15: 16: 17: 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的高级功能,敬请期待。
完整代码下载: http://files.iyunv.com/pandora/MvcApplication1_CRUD.zip
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com