c# - ModelState.IsValid 在使用 MongoDB 时包含错误

标签 c# asp.net-mvc mongodb asp.net-mvc-4 modelstate

我正在尝试使用 ASP.NET MVC 4 和 MongoDB 创建一个基本的电影数据库。我的问题出在我的 MovieController 的 POST 更新方法中。

[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

这是更新 View :

@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>
}

还有模型中的 Movie 类:

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。

我假设问题是在 View 中引起的,因为它试图发送字符串而不是 ObjectId 对象。但我不知道如何解决这个问题,有什么想法吗?

最佳答案

对于其他正在寻找此答案的人,可以从这篇文章中找到它,并且效果很好:http://www.joe-stevens.com/2011/06/12/model-binding-mongodb-objectid-with-asp-net-mvc/

创建模型绑定(bind)器:

public class ObjectIdBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var result = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
        return new ObjectId(result.AttemptedValue);
    }
}

然后在app start中注册:

protected void Application_Start()
{
    ModelBinders.Binders.Add(typeof(ObjectId), new ObjectIdBinder());
}

关于c# - ModelState.IsValid 在使用 MongoDB 时包含错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13307188/

相关文章:

c# - COM DLL 调用 WCF 服务的问题

c# - ASP C# 如何编写整洁的 GUI 代码

javascript - 限制下载次数

mongodb - 最小的 mongodb 数据文件大小是多少

javascript - 如何在 Meteor 中使用查找和回调

c# - 如何检测AxAcroPdf组件是否加载了PDF?

c# - 如何在本地管理 Azure Durable 功能任务中心?

asp.net-mvc - 允许使用 MVC 3 加号登录 URL

javascript - 有什么方法可以防止在 MVC 5 中提交表单?

asp.net-mvc - 如何处理具有多个聚合根的 View 模型?