当前位置:  开发笔记 > 编程语言 > 正文

如何在MVC.net中从MongoDB传递ObjectId

如何解决《如何在MVC.net中从MongoDB传递ObjectId》经验,为你挑选了2个好方法。

我正在与Mongo,NoRM和MVC .Net开始一个新项目.

在我使用FluentNHibernate之前,我的ID是整数,现在我的ID是ObjectId.因此,当我有一个编辑链接时,我的URL看起来像这样:

网站/管理/编辑/ 23,111,160,3,240,200,191,56,25,0,0,0

并且它不会作为ObjectId自动绑定到我的控制器

你有什么建议/最佳实践可以解决这个问题吗?我是否每次都需要对ID进行编码/解码?

谢谢!



1> Ian Mercer..:

使用像这样的自定义模型绑定器... (对付官方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)));
    }
}



2> Sherlock..:

我使用以下

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()

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有