论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Asp.net教程
Tag:静态页面,treeview,gridview,repeater,dataset,sqldatareader,ado.net,上传,三层,ajax,xml,留言本,新闻发布,商城,注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,触发器,socket,form认证,登录,视频教程

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

文章类别:Asp.net | 发表日期:2008-10-5 22:07:55

在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

视频教程列表
文章教程搜索
 
Asp.net推荐教程
Asp.net热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058