Отключение элемента управления .NET предотвращает его отправку обратно

У меня есть созданный на заказ элемент управления ASP, основанный на выборе (выпадающее меню). Если я отключу свой элемент управления, добавив слово «отключено» в его html, я начну получать ошибки нулевого указателя при обработке данных формы.

Я полагаю, что либо браузер не возвращает отключенные элементы формы, либо ASP.NET игнорирует их при обработке данных формы. Я не уверен, какой именно. Я пытаюсь понять, где я теряю данные.

Спасибо за вашу помощь.

PS. Я понимаю, что есть лучший способ создавать и отключать элементы управления, чем вручную редактировать html, но здесь есть контекст, который не позволяет мне поступать иначе.


person srmark    schedule 26.02.2009    source источник


Ответы (2)


Да, настройка элемента управления Enable = false предотвращает добавление значения элемента управления для сбора опубликованных данных.

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

здесь, в MSDN это говорит:

Значение Text элемента управления TextBox со свойством ReadOnly, для которого задано значение true, отправляется на сервер, когда происходит обратная передача, но сервер не обрабатывает текстовое поле, доступное только для чтения. Это предотвращает изменение пользователем-злоумышленником текстового значения, доступного только для чтения. Значение свойства Text сохраняется в состоянии представления между обратными передачами, если только оно не изменено кодом на стороне сервера.

Также здесь находится ответ Microsoft на отчет об ошибке, связанный с тема.

но если вы используете его классическим способом, он будет работать:

txt2.Attributes.Add("readonly", "readonly");
person Canavar    schedule 26.02.2009
comment
Это не работает для поля выбора. Выпадающий список неактивен, но я все еще могу изменить значения. См.: htmlcodetutorial.com/forms/_SELECT_READONLY.html. - person srmark; 26.02.2009
comment
Трюк только для чтения не работает для меня, но вы ответили на мой вопрос. Я просто обработаю нулевые значения. Спасибо - person srmark; 26.02.2009
comment
Я нашел какой-то ресурс, который объясняет, почему он не работает, и добавил проверенный и работающий код для текстовых полей, но я не уверен в раскрывающихся списках. - person Canavar; 26.02.2009

Это предотвратит отправку элемента управления обратно, но помните, что эта веб-парадигма является технологией клиент/сервер. Человек может модифицировать данные клиента (HTML и/или Javascript) и форсировать обратную передачу независимо от того, что вы ему отправляете.

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

Всегда выполняйте проверку на стороне сервера для конфиденциальных операций.

person Andrei Rînea    schedule 26.02.2009
comment
Да, я также применяю меры на уровне данных. Спасибо за напоминание. - person srmark; 27.02.2009