我们在提交一个表单的时候,可能由于网络或服务器的原因,处理很慢,而用户在处理结果出来之前反复点击按钮提交。这样很容易造成不必要的麻烦甚至是错误。说了这么多,其实就是要实现一个禁用某些控件的一种功能。好了,下面我就介绍自己简单实现的这个小功能。 <div class="codetitle" style="border-left-color: rgb(0, 153, 204); border-left- 1px; border-left-style: solid; padding: 0px 3px; margin: 3px auto 0px; 640px; clear: both; font-size: 14px; border-top-color: rgb(0, 153, 204); border-top- 1px; border-top-style: solid; border-right-color: rgb(0, 153, 204); border-right- 1px; border-right-style: solid; line-height: 25.2000007629395px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; background: rgb(242, 246, 251);">代码如下:</div><div class="codebody" id="code97423" style="border: 1px solid rgb(0, 153, 204); padding: 0px 3px 0px 5px; margin: 0px auto 3px; 638px; clear: both; font-size: 14px; line-height: 25.2000007629395px; font-family: Tahoma, Helvetica, Arial, 宋体, sans-serif; background: rgb(221, 237, 251);"> using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; namespace DotNet.Common.Util { /// <summary> /// 控件枚举,我们在禁用或启用时,就是根据这个枚举来匹配合适的项 /// </summary> public enum ControlNameEnum { Panel = 0, //容器 这个比较常用 TextBox = 1, Button = 2, //这个也比较常用 比如 按钮提交后的禁用,返回结果后启用 CheckBox = 3, ListControl = 4, All = 100 //所有 } public static class ControlHelper { #region 同时禁用或者启用页面的某些控件 /// <summary> /// 设置是否启用控件 /// </summary> /// <param name="control"></param> /// <param name="controlName"></param> /// <param name="isEnable"></param> public static void SetControlsEnabled(Control control, ControlNameEnum controlName, bool isEnabled) { foreach (Control item in control.Controls) { /* 我们仅仅考虑几种常用的asp.net服务器控件和html控件 */ //Panel if (item is Panel && (controlName == ControlNameEnum.Panel || controlName == ControlNameEnum.All)) { ((Panel)item).Enabled = isEnabled; } //TextBox,HtmlTextBox if (controlName == ControlNameEnum.TextBox || controlName == ControlNameEnum.All) { if (item is TextBox) { ((TextBox)(item)).Enabled = isEnabled; } else if (item is HtmlInputText) { ((HtmlInputText)item).Disabled = isEnabled; } else if (item is HtmlTextArea) { ((HtmlTextArea)(item)).Disabled = isEnabled; } } //Buttons if (item is Button && (controlName == ControlNameEnum.Button || controlName == ControlNameEnum.All)) { if (item is Button) { ((Button)(item)).Enabled = isEnabled; } else if (item is HtmlInputButton) { ((HtmlInputButton)(item)).Disabled = !isEnabled; } else if (item is ImageButton) { ((ImageButton)(item)).Enabled = isEnabled; } else if (item is LinkButton) { ((LinkButton)(item)).Enabled = isEnabled; } } //CheckBox if (controlName == ControlNameEnum.CheckBox || controlName == ControlNameEnum.All) { if (item is CheckBox) { ((CheckBox)(item)).Enabled = isEnabled; } else if (item is HtmlInputCheckBox) { ((HtmlInputCheckBox)(item)).Disabled = !isEnabled; } } //List Controls if (controlName == ControlNameEnum.ListControl || controlName == ControlNameEnum.All) { if (item is DropDownList) { ((DropDownList)(item)).Enabled = isEnabled; } else if (item is RadioButtonList) { ((RadioButtonList)(item)).Enabled = isEnabled; } else if (item is CheckBoxList) { ((CheckBoxList)(item)).Enabled = isEnabled; } else if (item is ListBox) { ((ListBox)(item)).Enabled = isEnabled; } else if (item is HtmlSelect) { ((HtmlSelect)(item)).Disabled = !isEnabled; } } //如果项目还有子控件,递归调用该函数 if (item.Controls.Count > 0) { SetControlsEnabled(item, controlName, isEnabled); } } } #endregion } } </div>在aspx页面中的调用如下:
复制代码代码如下:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ControlHelper.SetControlsEnabled(this.Page, ControlNameEnum.Panel, false); //Panel禁用
}
}