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