私はカスタム 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]」) のすべてのフィールドから情報を取得するにはどうすればよいですか? それらをすべて1つずつ取得する必要がありますか?このような:
var result1= bindingContext.ValueProvider.GetValue("DynamicDataItem[0].Id");
var result2= bindingContext.ValueProvider.GetValue("DynamicDataItem[0].Name");
これであなたが私に与えることができるガイダンスに大いに感謝します。