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");

Я буду очень признателен за любое руководство, которое вы можете мне дать в этом отношении.

11
задан Robert Harvey 16 May 2012 в 16:46
поделиться