ClientScriptManager.Зарегистрируйте проверку событий с помощью HiddenField

StackOverflow https://stackoverflow.com/questions/732158

Вопрос

Я пытаюсь использовать ClientScriptManager.RegisterForEventValidation для регистрации скрытого поля и значения, которые я добавляю с помощью ClientScriptManager.RegisterHiddenField .Я делаю это во время события рендеринга.Я не получаю никакой ошибки, но ASP.NET 2.0, похоже, не проверяет поле.Я могу изменить значение или удалить все поле на стороне клиента, используя Firefox и Firebug, и ASP.NET не выдаст ошибку, как следовало бы.

Пример кода из пользовательского класса страницы:

protected override void Render(HtmlTextWriter writer)
{
    ClientScript.RegisterHiddenField("stuff", "things");
    ClientScript.RegisterForEventValidation("stuff", "things");
    base.Render(writer);
}

Скрытое поле добавляется на страницу, но ASP.NET не проверяет поле или значение при обратной передаче.Что я упускаю из виду?

Это было полезно?

Решение

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

В вашем коде вы генерируете скрытое поле непосредственно для клиента, поэтому у сервера нет элемента управления, на который можно ссылаться при обратной передаче.Даже если бы вы использовали скрытый элемент управления полем на странице сервера, вы все равно не смогли бы проверить значение поля, потому что элемент управления не генерирует события обратной передачи (пользователь не может взаимодействовать с ним, и, следовательно, нет событий для проверки сервером).

Самое простое решение - использовать ViewState для сохранения значения поля, затем при обратной передаче убедитесь, что опубликованное значение поля равно значению, сохраненному в ViewState.ViewState по умолчанию зашифрован, поэтому это безопасное место для хранения данных, которые не должны изменяться на клиенте.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top