首页 > 开发 > 综合 > 正文

安全的设置dropDownList等列表类控件的selectedValue值

2024-07-21 02:30:03
字体:
来源:转载
供稿:网友
  • 本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。
  • 在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

    发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表