我是使用自定义 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");
我将不胜感激您能给我的任何指导。