作者:书友80922185 | 来源:互联网 | 2024-10-30 18:29
我们成功地构建了一个基于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引擎的代码写起来还是流畅+愉快。有一个简单的校技巧,想要链接目录从网站根目录开始的话,要用“/”开头。
显示效果如下:
接下来我们就分别来实现删除,编辑和查看功能。
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
\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