Если на странице динамически отображается отключенный раскрывающийся список, все еще можно использовать Firebug или другой инструмент для изменения отправленного значения и удаления «отключенного» атрибута HTML.
Этот код:
protected override void OnLoad(EventArgs e) {
var ddlTest = new DropDownList() {ID="ddlTest", Enabled = false};
ddlTest.Items.AddRange(new [] { new ListItem("Please select", ""), new ListItem("test 1", "1"), new ListItem("test 2", "2") });
Controls.Add(ddlTest);
}
приводит к отображению этого HTML-кода:
<select disabled="disabled" id="Properties_ddlTest" name="Properties$ddlTest">
<option value="" selected="selected">Please select</option>
<option value="1">test 1</option>
<option value="2">test 2</option>
</select>
Проблема возникает, когда я использую Firebug, чтобы удалить атрибут «disabled» и изменить выбранный параметр.
При отправке формы и повторном создании поля вновь созданный элемент управления имеет правильное значение к концу OnLoad, но OnPreRender принял идентичность отправленного элемента управления и получил значение отправленной формы.
Похоже, что в .NET нет способа обнаружить тот факт, что поле изначально было создано в отключенном состоянии, а отправленное значение было поддельным. Это понятно, поскольку могут существовать законные функциональные возможности на стороне клиента, которые позволят удалить отключенный атрибут.
Есть ли какой-нибудь способ, кроме метода грубой силы, обнаружить, что значение этого поля не должно было изменяться?
Я рассматриваю метод грубой силы как нечто дерьмовое, вроде сохранения правильного значения где-то еще в OnLoad и восстановления значения в OnPreRender. Поскольку некоторые поля зависят от других, для меня это было бы неприемлемо.