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