Мне интересно узнать, что вы, ребята, чувствуете, должно считаться "правильным поведением" с точки зрения метода UpdateModel
в ASP.NET MVC.
Причина, по которой я спрашиваю, может быть, если эта функциональность "по дизайну", кто-то может уточнить, почему она такая, какой она есть, и, возможно, способ назвать ее по-другому для достижения желаемой функциональности, которую я бы себе представлял как 90% людей захотят, чтобы это работало?
В сущности, моя проблема заключается в поведении процесса привязки в UpdateModel
.
Предположим, что вы хотите обновить форму с помощью простого метода действий Save
, для которого поля данных в форме отражают модель в вашей базе данных, изначально для сохранения запроса, мы могли бы получить существующую модель из базы данных, а затем обновить соответствующие поля, которые были изменены, отправлены через FormCollection
, а затем обновлены UpdateModel
к нашей существующей модели. Это работает, однако, похоже, что любое из существующих свойств этого объекта, заполненного БД, является "reset"; и под этим я имею в виду, устанавливаются значения null или инициализации по умолчанию, как если бы это был совершенно новый объект, за исключением, очевидно, тех, которые соответствуют значениям в FormCollection
.
Это проблема, потому что любые существующие свойства, которые существуют на объекте, но необязательно существуют в форме, такие как дочерние коллекции или объекты, даты или любые поля, не относящиеся к интерфейсу UI, пусты, более или менее непригодный для использования объект, который не может быть сохранен в БД из-за всех отсутствующих данных, включая, вероятно, стек идентификатора, теперь установленного на 0.
Я считаю, что это нежелательное поведение, а UpdateModel
должно только обновлять свойства, где находит соответствие свойства в FormCollection
. Это означает, что все ваши существующие свойства будут не затронуты, но ваши обновления будут установлены. Однако из того, что было выведено до сих пор, очевидно, это не так - кажется, он создает экземпляр новой копии объекта, обновляет свойства из формы, а затем возвращает новый объект.
Наконец, чтобы показать, в какой степени это связано с этим, единственный способ действительно сохранить его полу-сложную форму и сохранить все существующие данные объекта, чтобы вручную выйти замуж за каждый свойство с соответствующим свойством формы, чтобы полностью гарантировать, что обновляются только те свойства, которые существуют в форме.
Я думаю,
- Те, кто согласен с этим по дизайну, - это мой подход к форме, выйдя замуж за лучший способ?
- Или, как вы справились с этим в этом?
Пожалуйста, не стесняйтесь предлагать свои мысли этим парням, спасибо.
Вот еще один пример того, кто страдает от этой проблемы:
Вызов UpdateModel с набором сложных типов данных reset все не связанные значения?