4
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);
}
問題是SetProperty方法未被調用,因爲值提供程序不包含名爲ProjectMembersId的項。
也許我重寫了defaultModelBinder的錯誤部分。那麼最好的辦法是什麼?
你有沒有註冊您的自定義ModelBinder的這種模式? – frennky 2011-03-09 15:01:30
當然,只需調用模型綁定器即可跳過SetProperty函數。 – user256034 2011-03-09 18:33:28