在ModelBinder中为特定数据类型执行自定义绑定

时间:2009-10-07 03:16:52

标签: asp.net-mvc model-binders

我正在创建自己的自定义ModelBinder,它继承自DefaultModelBinder,并手动绑定XElement类型的属性。

现在看来我必须覆盖'BindProperty'方法,如下所示:

    protected override void BindProperty(
        ControllerContext controllerContext, 
        ModelBindingContext bindingContext, 
        System.ComponentModel.PropertyDescriptor propertyDescriptor)
    {
        if (propertyDescriptor.PropertyType == typeof(XElement))
        {
            // code here to take the POST-ed form value and put it in the property as an XElement instance
        }
        else
            base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
    }

我应该使用什么代码:

A)从发布的Form值中获取属性的值?

B)将此值注入属性?

我尝试在DefaultModelBinder类上运行Reflector来查看它是如何做到的,但代码非常混乱。

我需要有人这样做才能引导我完成它。

1 个答案:

答案 0 :(得分:3)

bindingContext 参数包含一个ValueProvider属性,该属性已使用请求中的值填充。我们的想法是从中提取值。

它只是一个值字典,因此您可以使用要绑定的字段的名称对其进行索引。

了解goint的最简单方法是应用自定义ModelBinder,然后在代码中设置断点并检查调试器中的数据。