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