Каково реальное преимущество атрибута 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.