安全的设置DropDownList等列表类控件的SelectedValue值
点击次数:36 次 发布日期:2008-11-26 11:30:15 作者:源代码网
|
源代码网推荐 源代码网推荐 最简单的办法就是直接进行指定: 源代码网推荐 DropDownList1.SelectedValue = "中国"; 源代码网推荐 但有的时候如果DropDownList1中没有"中国"这一项的话,赋值就会出现异常: 源代码网推荐 异常详细信息: System.ArgumentOutOfRangeException: “DropDownList1”有一个无效 SelectedValue,因为它不在项目列表中。 源代码网推荐 源代码网推荐 想要实现的目标:如果指定的值不在列表项中,则不设置选中项,而且不要抛出异常。 源代码网推荐 源代码网推荐 源代码网推荐 查看MSDN: 源代码网推荐 SelectedValue 属性还可以用于选择列表控件中的某一项,方法是用该项的值设置此属性。如果列表控件中的任何项都不包含指定值,则会引发 System.ArgumentOutOfRangeException。 源代码网推荐 源代码网推荐 但奇怪的是这样赋值在大部分情况下都不会出错,只是偶尔会出错,通过反射查了一下SelectedValue的实现,找到了原因。 源代码网推荐 public virtual string SelectedValue 源代码网推荐 { 源代码网推荐 get 源代码网推荐 { 源代码网推荐 int num1 = this.SelectedIndex; 源代码网推荐 if (num1 >= 0) 源代码网推荐 { 源代码网推荐 return this.Items[num1].Value; 源代码网推荐 } 源代码网推荐 return string.Empty; 源代码网推荐 } 源代码网推荐 set 源代码网推荐 { 源代码网推荐 if (this.Items.Count != 0) 源代码网推荐 { 源代码网推荐 if ((value == null) || (base.DesignMode && (value.Length == 0))) 源代码网推荐 { 源代码网推荐 this.ClearSelection(); 源代码网推荐 return; 源代码网推荐 } 源代码网推荐 ListItem item1 = this.Items.FindByValue(value); 源代码网推荐 if ((((this.Page != null) && this.Page.IsPostBack) && this._stateLoaded) && (item1 == null)) 源代码网推荐 { 源代码网推荐 throw new ArgumentOutOfRangeException("value", SR.GetString("ListControl_SelectionOutOfRange", new object[] { this.ID, "SelectedValue" })); 源代码网推荐 } 源代码网推荐 if (item1 != null) 源代码网推荐 { 源代码网推荐 this.ClearSelection(); 源代码网推荐 item1.Selected = true; 源代码网推荐 } 源代码网推荐 } 源代码网推荐 this.cachedSelectedValue = value; 源代码网推荐 } 源代码网推荐 } 源代码网推荐 源代码网推荐 原来只有在页面是IsPostBack的情况下,赋值才会出错。 源代码网推荐 源代码网推荐 源代码网推荐 另外这样写也会出现异常: 源代码网推荐 DropDownList1.Items.FindByValue("中国").Selected = true; 源代码网推荐 最后找到了一种方法可以实现上面的要求: 源代码网推荐 DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByValue("中国")); 源代码网推荐 就是如果通过FindByValue没有找到指定项则为null,而Items.IndexOf(null)会返回-1 源代码网推荐 http://www.cnblogs.com/weizhuangzhi/archive/2006/12/13/591251.html 源代码网推荐 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
