我正在与Mongo,NoRM和MVC .Net开始一个新项目.
在我使用FluentNHibernate之前,我的ID是整数,现在我的ID是ObjectId.因此,当我有一个编辑链接时,我的URL看起来像这样:
网站/管理/编辑/ 23,111,160,3,240,200,191,56,25,0,0,0
并且它不会作为ObjectId自动绑定到我的控制器
你有什么建议/最佳实践可以解决这个问题吗?我是否每次都需要对ID进行编码/解码?
谢谢!
使用像这样的自定义模型绑定器... (对付官方C#MongoDB驱动程序)
protected void Application_Start() { ... ModelBinders.Binders.Add(typeof(ObjectId), new ObjectIdModelBinder()); } public class ObjectIdModelBinder : DefaultModelBinder { public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { var result = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); if (result == null) { return ObjectId.Empty; } return ObjectId.Parse((string)result.ConvertTo(typeof(string))); } }
我使用以下
public class ObjectIdModelBinder : DefaultModelBinder { public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { string value = controllerContext.RouteData.Values[bindingContext.ModelName] as string; if (String.IsNullOrEmpty(value)) { return ObjectId.Empty; } return new ObjectId(value); } }
和
protected void Application_Start() { ...... ModelBinders.Binders.Add(typeof(ObjectId), new ObjectIdModelBinder()); }
差点忘了,从中制作网址 ObjectId.ToString()