2010-08-25 43 views
0

我有一個非常複雜的對象,其中有很多數據類型。一些數據類型是列表(準確地說,LazyLists)。防止模型聯編程序返回ASP.NET MVC中的空對象列表

在我的形式,我讓用戶輸入最多,說3個項目的列表和我的表單輸入名稱對應適當:

myObj[0].Name 
myObj[0].Email 
...consectuviely... 
myObj[2].Name 
myObj[2].Email 

如果用戶決定只輸入一個對象的值,這很好我,但我不希望像這樣的列表:

myObjList[0] = {Name = "joe", Email = "[email protected]"} 
myObjList[1] = {Name = null, Email = null} 
myObjList[2] = {Name = null, Email = null} 

我發現的問題是,DefaultModelBinder將創建對象第一則只是不綁定的屬性 - 離開物體與空的屬性。在列表的情況下,UpdateCollection方法似乎並不在意,只是在有對象添加時添加對象。

任何想法?有沒有簡單的我失蹤?

回答

0

這似乎工作得很好。我通常綁定列表,然後我只返回不等於新的EventContact(其中所有字段都是null)的項目。

public class EventContactListModelBinder : IModelBinder 
{ 
    #region IModelBinder Members 

    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     LazyList<EventContact> contacts = (LazyList<EventContact>)ModelBinders.Binders.DefaultBinder.BindModel(controllerContext, bindingContext); 
     var p = (from e in contacts 
       where !e.Equals(new EventContact()) 
       select e).AsQueryable(); 
     return new LazyList<EventContact>(p); 
    } 

    #endregion 
} 

我仍然開放給一個更優雅的解決方案,如果存在的話:)

相關問題