我正在嘗試使用ASP.NET MVC 4和MongoDB創建基本電影數據庫。我的問題是在我的MovieController的POST更新方法。ModelState.IsValid在使用MongoDB時包含錯誤
[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對象。但我無法弄清楚如何解決這個問題,有什麼想法?
對不起,等待,正在嘗試。它沒有完全工作,但我認爲你在正確的軌道上。發送到該方法的電影現在具有正確的Id(一個ObjectId),但ModelState仍然給我提供了相同的錯誤。我會繼續研究它,謝謝你的幫助到目前爲止 – Matt
嗯..你可以用你自己的驗證邏輯替換ModelState.IsValid,但我假設你想使用該MVC屬性:) – Mihai
得到它的工作,看到我的編輯。謝謝您的幫助! – Matt