ASP.NET MVC4使用MongoDB制作相册管理的完整攻略:
1. MongoDB安装
首先需要安装MongoDB数据库,可以在官网上下载并安装。安装完成后,在MongoDB所在目录下打开命令行工具,执行以下命令启动MongoDB服务:
mongod.exe --dbpath "C:\MongoDB\data\db"
其中,--dbpath指定MongoDB存储数据的路径。
启动MongoDB服务后,在命令行输入mongo,即可进入mongo shell。
2. 创建MVC4项目
使用Visual Studio创建一个MVC4项目,选择Empty模板,将项目命名为PhotoAlbum。
3. 引用MongoDB驱动
打开NuGet包管理器控制台,执行以下命令安装MongoDB驱动程序:
Install-Package MongoDB.Driver -Version 2.4.4
4. 创建PhotoAlbum模型
在Models文件夹下创建PhotoAlbum.cs文件,定义PhotoAlbum模型:
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
namespace PhotoAlbum.Models
{
public class PhotoAlbum
{
public ObjectId Id { get; set; }
[BsonElement("name")]
public string Name { get; set; }
[BsonElement("description")]
public string Description { get; set; }
[BsonElement("photos")]
public List<string> Photos { get; set; }
}
}
其中,ObjectId用于在MongoDB中为每个文档分配一个唯一的标识。BsonElement用于指定在MongoDB中对应字段的名称。
5. 创建PhotoAlbum控制器
右键Controllers文件夹,选择添加新项,选择控制器类,将其命名为PhotoAlbumController。
using PhotoAlbum.Models;
namespace PhotoAlbum.Controllers
{
public class PhotoAlbumController : Controller
{
private IMongoClient _client;
private IMongoDatabase _database;
private IMongoCollection<PhotoAlbum> _collection;
public PhotoAlbumController()
{
_client = new MongoClient();
_database = _client.GetDatabase("PhotoAlbumDb");
_collection = _database.GetCollection<PhotoAlbum>("PhotoAlbums");
}
public ActionResult Index()
{
var photoAlbums = _collection.Find(new BsonDocument()).ToList();
return View(photoAlbums);
}
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create(PhotoAlbum photoAlbum)
{
_collection.InsertOne(photoAlbum);
return RedirectToAction("Index");
}
public ActionResult Edit(string id)
{
var photoAlbum = _collection.Find<PhotoAlbum>(Builders<PhotoAlbum>.Filter.Eq("_id", ObjectId.Parse(id))).FirstOrDefault();
return View(photoAlbum);
}
[HttpPost]
public ActionResult Edit(PhotoAlbum photoAlbum)
{
var result = _collection.ReplaceOne(Builders<PhotoAlbum>.Filter.Eq("_id", photoAlbum.Id), photoAlbum);
return RedirectToAction("Index");
}
public ActionResult Delete(string id)
{
var result = _collection.DeleteOne(Builders<PhotoAlbum>.Filter.Eq("_id", ObjectId.Parse(id)));
return RedirectToAction("Index");
}
}
}
上述代码定义了一个PhotoAlbumController控制器,用于实现相册的增删改查功能。其中,使用MongoDB.Driver库中的IMongoClient、IMongoDatabase和IMongoCollection类与数据库进行交互。
6. 创建视图
在Views文件夹下创建PhotoAlbum文件夹,创建Index.cshtml、Create.cshtml、Edit.cshtml和Delete.cshtml视图。
Index视图
@model IEnumerable<PhotoAlbum.Models.PhotoAlbum>
<table>
<tr>
<th>Name</th>
<th>Description</th>
<th>Photos</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>@Html.DisplayFor(modelItem => item.Name)</td>
<td>@Html.DisplayFor(modelItem => item.Description)</td>
<td>@Html.DisplayFor(modelItem => item.Photos)</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.Id })
@Html.ActionLink("Delete", "Delete", new { id=item.Id })
</td>
</tr>
}
</table>
<p>
@Html.ActionLink("Create New", "Create")
</p>
上述代码使用了MVC中的DisplayFor和ActionLink辅助方法实现了数据的展示和跳转链接。
Create视图
@model PhotoAlbum.Models.PhotoAlbum
@using (Html.BeginForm()) {
<div>
<label>Name: </label>
@Html.TextBoxFor(model => model.Name)
</div>
<div>
<label>Description: </label>
@Html.TextAreaFor(model => model.Description)
</div>
<div>
<label>Photos: </label>
@Html.TextBoxFor(model => model.Photos)
</div>
<div>
<input type="submit" value="Create" />
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
Create视图使用了MVC中的BeginForm和TextBoxFor等辅助方法实现了表单的提交和数据绑定。
Edit视图
@model PhotoAlbum.Models.PhotoAlbum
@using (Html.BeginForm()) {
@Html.HiddenFor(model => model.Id)
<div>
<label>Name: </label>
@Html.TextBoxFor(model => model.Name)
</div>
<div>
<label>Description: </label>
@Html.TextAreaFor(model => model.Description)
</div>
<div>
<label>Photos: </label>
@Html.TextBoxFor(model => model.Photos)
</div>
<div>
<input type="submit" value="Save" />
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
Edit视图与Create视图类似,不过需要在表单中加入Id属性的隐藏域。
Delete视图
@model PhotoAlbum.Models.PhotoAlbum
<div>
<h4>Do you want to delete this record?</h4>
<h4>@Html.DisplayFor(model => model.Name)</h4>
<div>
@using (Html.BeginForm()) {
@Html.HiddenFor(model => model.Id)
<input type="submit" value="Delete" />
}
@Html.ActionLink("Cancel", "Index")
</div>
</div>
Delete视图实现了对数据的删除操作。
7. 测试
在控制台中启动MongoDB服务后,运行PhotoAlbum项目,在浏览器中输入http://localhost:port/PhotoAlbum即可看到相册管理页面。在页面中可以对相册进行增删改查操作。
示例
以下是向服务器中添加数据和读取数据的代码示例:
// 添加数据
var photoAlbum = new PhotoAlbum
{
Name = "Summer Vacation",
Description = "My summer vacation",
Photos = new List<string> { "photo1.jpg", "photo2.jpg" }
};
_collection.InsertOne(photoAlbum);
// 读取数据
var photoAlbums = _collection.Find(new BsonDocument()).ToList();
foreach (var album in photoAlbums)
{
Console.WriteLine("Name: {0}, Description: {1}, Photos: {2}", album.Name, album.Description, string.Join(",", album.Photos));
}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET MVC4使用MongoDB制作相册管理 - Python技术站