c# – MVC 3.0 ModelBinder bindingContext.ValueProvider.GetValue(key)在集合中绑定时返回null

前端之家收集整理的这篇文章主要介绍了c# – MVC 3.0 ModelBinder bindingContext.ValueProvider.GetValue(key)在集合中绑定时返回null前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是新的使用自定义的ModelBinders,我一直在寻找,我找不到与这个具体情况相关的任何帖子.

我有一个实体:

public class DynamicData
    {
       public IList<DynamicDataItem> DynamicDataItems{get;set;}
    }

在视图中我绑定如下:

@Html.EditorFor(model => model.DynamicDataItems);

我在DynamicDataItems类中有特殊的信息,我想以特定的方式检索,所以我创建了自己的模型绑定器.

public class DynamicDataItemBinder : IModelBinder
    {
        public object BindModel(ControllerContext controllerContext,ModelBindingContext bindingContext)
        {
            var key = bindingContext.ModelName;
            var valueProviderResult = bindingContext.ValueProvider
                .GetValue(key);

            if (valueProviderResult == null ||
                string.IsNullOrEmpty(valueProviderResult
                    .AttemptedValue))
            {
                return null;
            }

            //Here retrieve my own Information

            return DynamicDataItem;
        }
    }

bindingContext.ModelName包含“DynamicDataItem [0]”.

如果我做bindingContext.ValueProvider.ContainsPrefix(key),它返回true,但是当我执行GetValue(key)时,它返回null.
如果我检查ValueProvider包含什么,我看到有几个项目,他们的键从“DynamicDataItem [0]”开始.
我如何从目前被绑定的项目(“DynamicDataItem [0]”)的所有字段中检索信息?
我应该逐一检索它们吗?
喜欢这个:

var result1= bindingContext.ValueProvider.GetValue("DynamicDataItem[0].Id");
 var result2= bindingContext.ValueProvider.GetValue("DynamicDataItem[0].Name");

我将非常感谢您能给予我的任何指导.

解决方法

这个问题似乎是你试图将类型为DynamicDataItem的对象绑定到一个输入.由于DynamicDataItem不是字符串或其他一些基本类型,所以没有一个简单的方式来解析您的输入,并返回null.

假设类DynamicDataItem具有自己的属性,你想要做的是为DynamicDataItem的每个属性提供编辑器.如果您想要做的只是从视图传递一个绑定的子对象集合的模型,则甚至不需要自定义模型绑定.我想你想要的是你看来更像这样的东西

<input type="text" name="DynamicDataItem[0].SomeTextField" />
<input type="text" name="DynamicDataItem[0].SomeOtherTextField" />

查看Phil Haack和Scott Hanselman的话题

Here
Here

我希望有所帮助

猜你在找的C#相关文章