Вызов UpdateModel с набором сложных типов данных сбросил все несвязанные значения?

Я думаю, что это было бы хорошо, если бы Вы прокомментировали его, например, // ^ == XOR.

8
задан Marco M. 30 July 2009 в 19:28
поделиться

3 ответа

ОБНОВЛЕНИЕ: Я прошел через исходный код mvc (в частности, класс DefaultModelBinder ) и вот что я обнаружил:

Класс определяет, что мы пытаемся привязать коллекцию, поэтому он вызывает метод: UpdateCollection (.. .) , который создает внутренний ModelBindingContext , имеющий свойство null Model . После этого этот контекст отправляется методу BindComplexModel (...) , который проверяет свойство Model на null и создает новый экземпляр типа модели, если это так.

Это то, что вызывает сброс значений.

Итак, заполняются только значения, поступающие через форму / строку запроса / данные маршрута, остальные остаются в своем инициализированном состоянии.

9
ответ дан 5 December 2019 в 12:11
поделиться

Вы только что дали мне идею покопаться в исходном коде ASP.NET MVC 2. Я борюсь с этим уже две недели . Я обнаружил, что ваше решение не будет работать с вложенными списками. Я помещаю точку останова в метод UpdateCollection, и она никогда не срабатывает. Похоже, что корневой уровень модели должен быть списком для вызова этого метода

Это вкратце модель, которая у меня есть ... У меня также есть еще один уровень общих списков, но это всего лишь небольшой пример.

public class Borrowers
{
   public string FirstName{get;set;}
   public string LastName{get;set;}
   public List<Address> Addresses{get;set;}
}

Думаю, мне нужно будет копнуть глубже, чтобы узнать, что происходит.

ОБНОВЛЕНИЕ: UpdateCollection по-прежнему вызывается в asp.net mvc 2, но проблема с вышеуказанным исправлением связана с этим ЗДЕСЬ

1
ответ дан 5 December 2019 в 12:11
поделиться

Руди Бриденраед только что написал отличное сообщение , описывающее эту проблему и очень полезное решение. Он переопределяет DefaultModelBinder, а затем, когда он встречает коллекцию для обновления, он фактически обновляет элемент, а не создает его новым, как поведение MVC по умолчанию. При этом поведение UpdateModel () и TryUpdateModel () согласуется как с корневой моделью, так и с любыми коллекциями.

4
ответ дан 5 December 2019 в 12:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: