を結合私はこのAsp.net MVC 3 - カスタムモデルは
public string Name { get; set; }
public IEnumerable<int> ProjectMembersId { get; set; }
ようなモデルプロパティ名がスタンダールバインディングコードを使用してバインドする必要があります持っています。
しかし、ProjectMembersIdプロパティは自分のカスタムコードを使用してバインドする必要があります。
私はDefaultModelBinderからクラスを派生し、SetPropertyメソッドをオーバーライドしました。
protected override void SetProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, System.ComponentModel.PropertyDescriptor propertyDescriptor, object value)
{
if (propertyDescriptor.Name == "ProjectMembersId")
{
var list = new List<int>(5);
var form = controllerContext.HttpContext.Request.Form;
var names = form.AllKeys.Where(x => x.StartsWith("dhxGridObj"));
foreach (var name in names)
{
int i;
if (int.TryParse(form.Get(name), out i))
{
list.Add(i);
}
}
value = list;
}
base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value);
}
バッド値プロバイダにProjectMembersIdという項目が含まれていないため、SetPropertyメソッドが呼び出されないという問題があります。
おそらく、私はdefaultModelBinderの間違った部分をオーバーライドしています。それでは、何が最善の方法でしょうか?
は、あなたがこのモデルのカスタムmodelbinderを登録したことがありますか? – frennky
もちろん、モデルバインダーは単にSetProperty funcと呼ばれ、スキップされます。 – user256034