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

c# – ModelState.IsValid在使用MongoDB时包含错误,第1张

概述我正在尝试使用ASP.NET MVC 4和MongoDB创建一个基本的电影数据库.我的问题出在我的MovieController的POST Update方法中. [HttpPost] public ActionResult Update(Movie movie) { if (ModelState.IsValid) { _mo 我正在尝试使用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>}

和模型中的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.

我假设问题是在视图中引起的,因为它试图发送字符串而不是ObjectID对象.但我无法弄清楚如何解决这个问题,任何想法?

解决方法 问题是MVC不知道如何将您的ID转换为ObjectID类型.它只将其视为字符串.

您必须为您的方法使用自定义绑定器.
看看这个链接http://www.dotnetcurry.com/ShowArticle.aspx?ID=584

看看这个

public class MovIEModelBinder : IModelBinder{    public object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext)    {        var modelBinder = new DefaultModelBinder();        var movIE = modelBinder.BindModel(controllerContext,bindingContext) as MovIE;        var ID = controllerContext.httpContext.Request.Form["ID"];        if (movIE != null)        {            movIE.ID = new ObjectID(ID);            return movIE ;        }        return null;    }}

并更改您的Update方法

public ActionResult Update([ModelBinder(typeof(MovIEModelBinder))] MovIE movIE)
总结

以上是内存溢出为你收集整理的c# – ModelState.IsValid在使用MongoDB时包含错误全部内容,希望文章能够帮你解决c# – ModelState.IsValid在使用MongoDB时包含错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1223591.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存