asp.net 简单实现禁用或启用页面中的某一类型的控件 |
本文标签:禁用,启用,控件 比如,我们在提交一个表单的时候,可能由于网络或服务器的原因,处理很慢,而用户在处理结果出来之前反复点击按钮提交 。这样很容易造成不必要的麻烦甚至是错误 。说了这么多,其实就是要实现一个禁用某些控件的一种功能 。好了,下面我就介绍自己简单实现的这个小功能,贴代码: 复制代码 代码如下: 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 } } 在aspx页面中的调用如下: 复制代码 代码如下: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ControlHelper.SetControlsEnabled(this.Page, ControlNameEnum.Panel, false); //Panel禁用 } } 需要注意的是,我这里的实现只是针对几种常用控件,您可以按照自己项目的需要任意扩展 。 测试打包下载 |