Каково реальное преимущество атрибута ScaffoldColumn, установленного в False в свойствах идентификатора модели MVC 3
Я новичок в MVC, и когда я построил свои классы моделей для первого подхода к коду, каждый столбец идентификатора ключа имел атрибут [ScaffoldColumn(false)]
set. Я сделал это, потому что я не хотел, чтобы идентификатор отображался в представлениях, очевидно, и я знаю, что обойти эту проблему будет удаление HTML, сгенерированного пользовательским интерфейсом в каждом представлении, содержащем поле ID.
проблема, с которой я столкнулся, используя ScaffoldColumn
значение false
в моделях было впервые замечено, когда был запущен метод редактирования для представления выкл., и я получил эту ошибку: инструкция Store update, insert или delete повлияла на неожиданное количество строк (0). Когда я запускал код в debug, свойство ID было фактически установлено в ноль, как указано в моем представлении Edit HttpPost
метод.
мой вопрос, который, я надеюсь, кто-то может уточнить, заключается в том, какой смысл иметь такой атрибут, как ScaffoldColumn
в MVC, если идентификатор не отправляется в метод(ы) контроллера, как в этом случае Edit HttpPost
? Должен ли я просто заняться этим старым? способ Моды и удаление разметки HTML в каждом представлении, созданном храмами MVC, созданными, когда этот атрибут не добавляется к свойствам ключа/внешнего ключа?
работа вокруг я нашел, если вы установите этот атрибут в false
добавлял ID param к каждому HttpPost
метод, а затем установка соответствующего поля свойства ID перед вызовом SaveChanges()
.
4 ответов
Ну, вы не хотите, чтобы он был скомпонован как редактируемое поле, но, конечно, вы хотите его в форме, как вы заметили. Решение состоит в том, чтобы просто добавить его вручную в качестве скрытого поля в представлении. Что-то вроде этого:--2-->
@Html.HiddenFor(model => model.id)
вы можете использовать аннотации данных для этого и работать с:
[HiddenInput(DisplayValue=false)]
таким образом, ваше поле будет отображаться с помощью скрытого ввода в представление. Нет необходимости вносить какие-либо изменения, представление будет знать, как его отобразить.
[ScaffoldColumn (false)], он просто скрывает свойство. Предположим, у вас есть свойство ID auto incremented. Пользователь не имеет ничего общего с этим свойством. Поэтому используйте его, чтобы скрыть свойство в поле зрения.
ScaffoldColumn изменяет только поведение методов, таких как Html.DisplayForModel (), который фактически использует система шаблонных представлений по умолчанию введена в MVC 2. Это не влияет на мастера Visual Studio, поставляемые с MVC.