Я новичок в пользовательских 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;
}
}
СвязываниеContext.ModelName содержит "DynamicDataItem [0]" .
Если я делаю bindingContext.ValueProvider.ContainsPrefix(ключ), он возвращает true, но когда я делаю GetValue (ключ), он возвращает null. Если я проверю, что содержит ValueProvider, я вижу, что есть несколько элементов с их ключом запуска в "DynamicDataItem [0]" . Как я могу подавить информацию из всех полей для предмета, который в настоящее время привязан ( "DynamicDataItem [0]" )? Должен ли я получить их все по одному? Вот так:
var result1= bindingContext.ValueProvider.GetValue("DynamicDataItem[0].Id");
var result2= bindingContext.ValueProvider.GetValue("DynamicDataItem[0].Name");
Я буду очень признателен за любые рекомендации, которые вы можете мне дать.