Предстаим ситуацию: мы разрабатываем компонент ASP.NET, например color picker. Мы написали JavaScript, который отображает табличку для выбора цвета, и добавили ASP.NET TextBox, в который будет записыватся выбранный цвет. Но нам бы не хотелось позволять пользователю менять значение цвета вручную (да и зачем, у нас и так есть picker, над которым мы так трудились ;)).
И мы ставим у TextBox значение проперти ReadOnly в true. Пришло время использовать наш супер-пикер. Бросаем его на страницу, выбираем цвет, и отправляем форму на сервер, и.. Oh My God! Где же выбранное значение? Почему свойство Text пустое?!
Где-то так было у меня.. Но все от незнания (или от плохой памяти... ).
Вот что говорит MSDN по этому поводу:
The Text value of a TextBox control with the ReadOnly property set to true is sent to the server when a postback occurs, but the server does no processing for a read-only text box. This prevents a malicious user from changing a Text value that is read-only. The value of the Text property is preserved in the view state between postbacks unless modified by server-side code.
Так что будьте на чеку :), чтобы это не стало сюрпризом и не вылилось в несколько часов поисков «а где же мое значение».
Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.