自定义ModelBinder,仅转换已发布数据的某些部分

时间:2012-05-30 17:37:30

标签: asp.net-mvc-3

假设我们的WebService中有以下方法:

ActionResult SomeMethod(int primitiveValue, List<MyComplexValue> complexValues)
{ 
//...
}

class MyComplexValue
{
    public int TransformedValue { get; set; }
}

WebClient将以下JSON数据发布到我们的方法:

{ primitiveValue: 17, complexValues: [ { Value: 1}, { Value: 2} ]}

我现在想要实现一个自定义的ModelBinding,它只将“complexValues”参数转换为我自己的MyComplexValue实例列表。 那可能吗? DefaultModelBinder仍应处理所有原始值(例如参数“primitiveValue”)。

我试图通过以下方式实现Custom ModelBinder:

public class CustomModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        string incomingData = bindingContext.ValueProvider.GetValue(bindingContext.ModelName).AttemptedValue;
        if (incomingData == null)
            return null;

        //Transform passed object list to ComplexValue List
    }

}

//...

ActionResult SomeMethod(int primitiveValue, [ModelBinder(typeof(CustomModelBinder ))] List<MyComplexValue> complexValues)
{ 
//...
}

问题是,GetValue始终返回null。我希望它返回字符串“[{Value:1},{Value:2}]”,这样我就可以自己反序化这个JSON并自己处理转换。

有什么想法吗?

谢谢!

0 个答案:

没有答案