[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时包含错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)