|
|
|
 |
 |
Исходник |
 |
|
 |
 |
|
Автор:
|
|
|
Название:
|
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 } |
| Вернуться к списку исходников в категории Создание элементов управления |
|
|
 |
 |
 |
 |
|
|