Предотвращение связывания модели от возврата списка нулевых объектов в ASP.NET MVC - PullRequest
0 голосов
/ 25 августа 2010

У меня довольно сложный объект с многочисленными типами данных.Несколько типов данных - это списки (точнее LazyLists).

В моей форме я позволил пользователю ввести до, скажем, 3 элемента для этого списка, и мои имена ввода в форме соответствуют:

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

Если пользователь решает ввести значения только одного объекта, это нормально для меня, но мне не нужен такой список:

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

Проблема, которую я обнаружил, заключается в том, что DefaultModelBinderсначала создаст объект, а затем просто не связывает свойства, оставляя объект с нулевыми свойствами.В случае списка, метод UpdateCollection, похоже, не заботится, а просто добавляет объекты, в то время как есть объекты для добавления.

Есть идеи?Есть что-то простое, что мне не хватает?

1 Ответ

0 голосов
/ 25 августа 2010

Это, кажется, работает хорошо.Я обычно связываю список, затем я возвращаю только те элементы, которые не равны новому 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
}

Я все еще открыт для болееэлегантное решение, если таковое существует:)

...