我正在尝试使用 ASP.NET MVC 4 和 MongoDB 创建一个基本的电影数据库。我的问题出在我的 MovieController 的 POST Update 方法中。
[HttpPost]
public ActionResult Update(Movie movie)
{
if (ModelState.IsValid)
{
_movies.Edit(movie);
return RedirectToAction("Index");
}
return View();
}
ModelState 包含电影的 Id 字段(它是一个 ObjectId 对象)的错误并引发以下异常:
{System.InvalidOperationException: The parameter conversion from type 'System.String' to type 'MongoDB.Bson.ObjectId' failed because no type converter can convert between these types
这是更新视图:
@model MVCMovie.Models.Movie
@{
ViewBag.Title = "Update";
}
<h2>Update</h2>
@using (Html.BeginForm())
{
@Html.HiddenFor(m => m.Id);
@Html.EditorForModel()
<p>
<input type="submit" value="Update" />
</p>
}
和模型中的电影类:
namespace MVCMovie.Models
{
public class Movie
{
[BsonId]
public ObjectId Id { get; set; }
public string Title { get; set; }
public DateTime ReleaseDate { get; set; }
public string Genre { get; set; }
public decimal Price { get; set; }
[ScaffoldColumn(false)]
public DateTime TimeAdded { get; set; }
}
}
编辑:解决方案我将 [ScaffoldColumn(false)] 添加到 Id 中,以便浏览器不会尝试呈现它。但是我仍然需要实现 Mihai 提供的解决方案才能传递正确的 ID。
我假设问题是在视图中引起的,因为它试图发送一个字符串而不是一个 ObjectId 对象。但我不知道如何解决这个问题,有什么想法吗?