Реклама:

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

ПРИМЕЧАНИЕ Свойства ViewStateUserKey и ViewStateEncryptionMode также можно применять для подтверждения событий.

Создание собственною элемента управления с поддержкой подтверждения событий

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

" При визуализации элемента управления вызовите метод RegisterForEventValidatiun менеджера клиентских сценариев страницы. Если речь идет о простом элементе управления возвратом формы (таком как кнопка), просто зарегистрируйте свой уникальный ID. Если элемент управления поддерживает имена команд и аргументы или является элементом управления из списка, зарегистрируйте все возможные значения возвращаемых формой данных. Регистрация означает, что хэш комбинации уникального ID и возвращаемые формой значения помещается в скрытое поле EVENTVALIDATION.

■ Когда элемент управления получает данные обратно, он должен прочитать их и вызвать метод ValidateEvenC с уникальным ID и возвращаемым формой значением (или аргументом). Функция ValidaCeEvent выполняет поиск хэша такой комбинации в данных подтверждения событий и вызывает исключительную ситуацию, если это значение не было найдено.

В приведенном далее коде продемонстрировано, как можно внедрить эту логику в простой элемент управления Button.

public class MyButton : WebControl, IPostBackEventHandler {

public event EventHandler Click;

public string Text

{

get { return (string)ViewState[Text'] ?? "OK"; I set ( VlewStatef'Text"] = value; }

)

protected override void Render(HtmlTextWriter writer) {

String toRender = String.Format(

"<input type=\"submit\" name=Y40}\" value«\"{i>\" id=\"(0)\" />",

this.ID, HttpUtllity.HtntlEncode(text));

writer.Write(toRender);

// Регистрация возвращаемых формой данных (1) this. Page.ClientScnpt. Register For Event validation; this.UniqueiD);

}

public void RaisePostBackEvent(string eventArgument) {

// Проверка регистрации возвращаемых формой данных (2) this.Page.CllentScript.ValidateEvent(this.UnjquelD);

)

protected virtual void OnClickO {

if (Click != null)

Click.Invoke(this, EventArgs.Empty);

}

}

Элементы списка регистрируются во время визуализации.

protected override void Render(HtmlTextWriter writer) {

writer.Write("<select size=\"4\" na«te=Y'{°'Y' id»\"{0}\ ">", this.ID);

foreach (string s in listltems) <

writer.Write("<option>{0}</option>". s);

this.Page ClientScript RegisterForEvemValidâtion(

fis.UniquelD, s):

)

writer.Write("</select>");


⇐ Предыдущая страница| |Следующая страница ⇒