我正在尝试编写一个自定义模型绑定器,但我很难设法如何绑定复杂的复合对象.
这是我想要绑定的类:
public class Fund { public int Id { get; set; } public string Name { get; set; } public ListFundAllocations { get; set; } }
这就是我尝试编写自定义绑定器的方式:
public class FundModelBinder : IModelBinder { public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) { throw new NotImplementedException(); } public object GetValue(ControllerContext controllerContext, string modelName, Type modelType, ModelStateDictionary modelState) { var fund = new Fund(); fund.Id = int.Parse(controllerContext.HttpContext.Request.Form["Id"]); fund.Name = controllerContext.HttpContext.Request.Form["Name"]; //i don't know how to bind to the list property :( fund.FundItems[0].Catalogue.Id = controllerContext.HttpContext.Request.Form["FundItem.Catalogue.Id"]; return fund; } }
有任何想法吗
谢谢Tony
你真的需要在这里实现自定义ModelBinder吗?默认绑定器可以执行您需要的操作(因为它可以填充集合和复杂对象):
让我们说你的控制器动作如下:
public ActionResult SomeAction(Fund fund) { //do some stuff return View(); }
你的HTML包含这个:
默认模型绑定器应该使用FundAllocations列表中的2个项目初始化您的基金对象(我不知道您的FundAllocation类是什么样的,所以我编写了一个属性"SomeProperty").只要确保包含那些"fund.FundAllocations.Index"元素(默认绑定器为它自己使用而查看),当我试图让它工作时,这就得到了我.