Rambler's Top100
Главная
Новости
Статьи
Форумы
Книги
Коды
Сообщество
Блоги
О нас
 

Логин

Email:
  Пароль:

Войти
Зарегистрироваться
Забыл пароль

Поиск

 Искать :
 
Вперед

Книги по теме

Искать:
в:
Порядок:

Исходник

Автор:

Igon

 
Название:

ImageButton "Одноразовая" кнопка 2

Дата: 01 August 2007
Описание: Контрол обеспечивает однократное нажатие кнопки на форме. Кнопка нагло слизана отсюда: [CODEPOST ID=213]"Одноразовая" кнопка 2[/CODEPOST]. Позволяет управлять поведением кнопки (одноразовая/не одноразовая), обработка валидации (т.е. если страница не прошла клиентскую валидацию кнопка не "залипнет") и самое главное добавлено сохранение значений AutoComplete из полей формы, которое автоматически не отрабатывает, из-за бага в IE (http://support.microsoft.com/kb/329156). Кроме того можно задавать урл и алтернативный текст для кнопки, которые будут отображатся непосредственно в момент постбека. 
  Разместить ссылку на этот исходник в форуме вы можете вставив в текст сообщения следующую строку: [CODEPOST ID=214]ImageButton "Одноразовая" кнопка 2[/CODEPOST]
Оценка: Проголосовало 4 посетителей, средняя оценка 4.50
Оценить:
  1 using System;
  2 using System.ComponentModel;
  3 using System.Web.UI;
  4 using System.Web.UI.WebControls;
  5 
  6 namespace WebControlsLibrary
  7 {
  8     [ToolboxData("<{0}:OneClickButton runat=server></{0}:OneClickButton>")]
  9     [Description("Кнопка, обеспечивающая однократное нажатие  ")]
 10     public class OneClickImageButton : ImageButton
 11     {
 12         private bool _isClicked;
 13         private string _clickText;
 14         private string _clickImageUrl;
 15         private bool _onceClickable;
 16 
 17         #region Свойства
 18 
 19         /// <summary>
 20         /// Сохраняте факт  нажатия на кнопку 
 21         /// </summary>
 22         protected internal bool IsClicked
 23         {
 24             get { return _isClicked; }
 25             set { _isClicked = value; }
 26         }
 27 
 28 
 29         /// <summary>
 30         /// Алтернативный текст, отображаемый на кнопке  после  нажатия
 31         /// </summary>
 32         [DefaultValue("Идет обработка !")]
 33         [Description("Алтернативный текст, отображаемый на кнопке  после  нажатия")]
 34         public string AlternateClickText
 35         {
 36             get { return _clickText; }
 37             set { _clickText = value; }
 38         }
 39 
 40         /// <summary>
 41         /// Url картинки, отображаемой на кнопке  после  нажатия
 42         /// </summary>
 43         [DefaultValue("")]
 44         [Description("Url картинки, отображаемой на кнопке  после  нажатия")]
 45         public string ClickImageUrl
 46         {
 47             get { return _clickImageUrl; }
 48             set { _clickImageUrl = value; }
 49         }
 50 
 51         /// <summary>
 52         /// Признак того, что кнопка будет нажиматься только раз
 53         /// </summary>
 54         [DefaultValue(false)]
 55         [Description("Признак того, что кнопка будет нажиматься только раз")]
 56         public bool OnceClick
 57         {
 58             get { return _onceClickable; }
 59             set { _onceClickable = value; }
 60         }
 61 
 62         #endregion
 63 
 64         #region Protected методы
 65 
 66         protected override object SaveViewState()
 67         {
 68             object[] state;
 69             state = new object[5];
 70             state[0] = base.SaveViewState();
 71             state[1] = IsClicked;
 72             state[2] = AlternateClickText;
 73             state[3] = ClickImageUrl;
 74             state[4] = OnceClick;
 75             return state;
 76         }
 77 
 78         protected override void LoadViewState(object savedState)
 79         {
 80             if (savedState != null)
 81             {
 82                 object[] state;
 83                 state = savedState as object[];
 84                 if (state[0] != null)
 85                     base.LoadViewState(state[0]);
 86                 if (state[1] != null)
 87                     IsClicked = (bool) state[1];
 88                 if (state[2] != null)
 89                     AlternateClickText = (string) state[2];
 90                 if (state[3] != null)
 91                     ClickImageUrl = (string) state[3];
 92                 if (state[4] != null)
 93                     OnceClick = (bool) state[4];
 94             }
 95         }
 96 
 97         protected override void OnPreRender(EventArgs e)
 98         {
 99             base.OnPreRender(e);
100             if (!OnceClick) return;
101             if (!IsClicked)
102             {
103                 string strClickedText = (string.Empty.Equals(AlternateClickText))
104                                             ? string.Empty
105                                             : (" window.event.srcElement.alt='" + AlternateClickText + @"';");
106                 string strClickedUrl = (string.Empty.Equals(ClickImageUrl))
107                                            ? string.Empty
108                                            : (" window.event.srcElement.src='" + ClickImageUrl + @"';");
109                 OnClientClick =
110                     "if (typeof(Page_ClientValidate) == 'function')                         "
111                     + "{                                                                    "
112                     + "   var PageClientValid = Page_ClientValidate();                      "
113                     + "   if (!PageClientValid) return false;                               "
114                     + "}                                                                    "
115                     + "   window.event.srcElement.disabled=true;                            "
116                     + strClickedText
117                     + strClickedUrl
118                     + Page.ClientScript.GetPostBackEventReference(new PostBackOptions(this))
119                     + "   var formID = document.forms[0].id;                                "
120                     + "   window.external.AutoCompleteSaveForm(formID);                     "
121                     + ";return true;";
122             }
123             else
124             {
125                 Attributes.Add("disabled", "true");
126             }
127         }
128 
129         protected override void OnClick(ImageClickEventArgs e)
130         {
131             base.OnClick(e);
132             IsClicked = true;
133         }
134 
135         #endregion
136 
137         public OneClickImageButton()
138             : base()
139         {
140             AlternateClickText = "Идет обработка !";
141             ClickImageUrl = string.Empty;
142             OnceClick = false;
143         }
144     }
145 }
Вернуться к списку исходников в категории Создание элементов управления
 
Наш Киев

Apartments for Rent

Rambler's Top100
Рейтинг@Mail.ru
Идея: Dimon aka Manowar Программирование: Dimon aka Manowar Дизайн: Dan Lebedev
Хостинг от компании Parking.ru
Карта сайта