ClientScriptManager.RegisterForEventValidation with HiddenField - PullRequest
1 голос
/ 09 апреля 2009

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

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

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

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

1 Ответ

2 голосов
/ 09 апреля 2009

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

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

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

...