当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  安全的设置DropDownList等列表类控件的SelectedValue值

 安全的设置DropDownList等列表类控件的SelectedValue值

点击次数:36 次 发布日期:2008-11-26 11:30:15 作者:源代码网
源代码网推荐      在ASP.NET 2.0 网站页面的开发过程中,经常需要把DropDownList等列表类控件的SelectedValue值设置为一个从数据库或其他地方读取出来的值。
源代码网推荐  
源代码网推荐  最简单的办法就是直接进行指定:
源代码网推荐  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)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华