MVC3, Модели, Создание и редактирование скрытых полей - PullRequest
0 голосов
/ 09 августа 2011

У меня есть несколько моделей в моем веб-приложении MVC3, в которых есть поля, которые нужно устанавливать «за кулисами», когда пользователь создает или редактирует объект / сущность.

Я пытаюсь выяснить,что лучше всего делать с этими типами полей.

Например ...

public class EntityA {
  public int Id { get; set; }
  public string Title { get; set; }
  ...
  [ForeignKey("User")]
  public int UpdatedBy_Id { get; set; }
  public virtual User UpdatedBy { get; set; }
}

Виды создания и редактирования для этого позволяют пользователю редактировать поле "Заголовок", нополе «updatedBy» должно быть установлено приложением при вставке или обновлении объекта.

Лучше всего добавить скрытое поле в представления и установить там «updatedBy_Id» или использовать свойство модели »получить / установить "тело для этого?... или ... Должно ли это быть на HttpPost в контроллере?

Ответы [ 3 ]

1 голос
/ 09 августа 2011

Здесь пригодятся DTO (объекты передачи данных).

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

Затем в вашем контроллере, когда вы будете готовы сохранить сущность, вы создаете новый объект сущности, берете свойства из DTO, переданные действию, и копируете их в свой объект сущности.Именно в этот момент вы можете установить свойство updatedBy.

Чтобы упростить жизнь при отображении свойств из сущности в DTO (и наоборот), вы можете посмотреть на AutoMapper , которыйбудет обрабатывать это автоматически, если вы используете те же имена для своих свойств.

Если вы просто передаете сущность в представление, есть возможность для пользователя изменить значения свойств, которые вы не хотитечтобы они могли.

0 голосов
/ 09 августа 2011

Я бы предпочел размещать подобные поля вне контроля пользователя. Особенно если это целочисленные поля, которые пользователь может редактировать для создания фальшивых записей. Затем выбор делается между использованием TempData (если сеанс включен) или возможным извлечением его на лету для текущего пользователя. Если вы не беспокоитесь о том, что пользователь их изменяет, то я бы выбрал простое скрытое поле или поместил его в значения маршрута для публикации, что позволит каркасу сделать всю работу за вас.

0 голосов
/ 09 августа 2011

Я бы сказал, использовать скрытое поле и установить UpdatedBy_Id. Затем он будет отправлен обратно вместе с формой и может быть привязан к данным, как и остальная информация.

...