我是在属性列表里选的multiple属性,实际效果如下
<select …… runat="server" multiple="multiple">
</select>但运行时报错Parser Error 
Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately. Parser Error Message: Cannot create an object of type 'System.Boolean' from its string representation 'multiple' for the 'Multiple' property.PS : 是ASP.NET 2.0

解决方案 »

  1.   

    <select id="Select1" runat="server" multiple="true" style="width: 344px">
      

  2.   


            <asp:ListBox ID="ListBox1" runat="server" SelectionMode="Multiple">
                <asp:ListItem>item1</asp:ListItem>
                <asp:ListItem>item2</asp:ListItem>
                <asp:ListItem>item3</asp:ListItem>
            </asp:ListBox>
      

  3.   

    生成的HTML结果为:
    [code=HTML]
            <select size="4" name="ListBox1" multiple="multiple" id="ListBox1">
    <option value="item1">item1</option>
    <option value="item2">item2</option>
    <option value="item3">item3</option>[/code]
      

  4.   

    <select id="Select1" runat="server">
    <option></option>
    </select>是服务器控件中的dropdownlist<select id="Select1" runat="server" multiple="multiple">
    <option></option>
    </select>是服务器控件中的ListBox,应该不会有问题的
      

  5.   

    我当然知道ListBox可以,
    但是我要的是服务器端select,
    标题里写得很清楚了1楼的可以,这我也知道但是我想知道为啥我在属性列表里选的属性却会运行时出错
    在属性列表里选的属性,其实是HTML控件本身的属性,
    但是它却把之当作一个服务器端属性来直接解析了,
    难道是个bug?
      

  6.   

    楼上,我要的是直接写在页面里的select,而不是ListBox生成的select
      

  7.   

    是bug
    估计写控件的人,弄混了.就像textbox在web form下和winform下的控件的设置一样. 只不过那个没有bug
      

  8.   

    有意思,htmlselect的属性multiple居然是用以下方式设置的public void set_Multiple(bool value)
    {
        if (value)
        {
            base.Attributes["multiple"] = "multiple";
        }
        else
        {
            base.Attributes["multiple"] = null;
        }
    }所以只有使用multiple= "true"是正确的;我觉得此处的multiple属性应该
    像htmlbutton的disabled一样在RenderAttributes里解析生成就好了
      

  9.   

    就像<input id="sb" checked="checked" runat="server" type="radio" />报错一样的
      

  10.   

    <select   ……   runat= "server "   multiple= "true">
    </select> 
      

  11.   

    <input id="sb" checked="true" runat="server" type="radio" />
      

  12.   

    近期看到过14楼朋友的一些回贴,对.net类库研究的比较深啊
      

  13.   


    Ivony... 13:31:51
    然后,我给SELECT加上disabled属性,这也是一个空值属性。Ivony... 13:32:18
    结果disabled属性不被智能提示所识别。无论是设置disabled还是设置disabled="disabled",结果都是正确的。Ivony... 13:33:33
    然后我又在input上测试,确定disable="disabled"这样的表达式能够被Parser分析。Ivony... 13:33:55
    再查Input类型,确定Disabled是bool型。Ivony... 13:34:29
    至此,可以确定是微软没有在Select元素上采取特殊处理所造成的。
    Ivony... 13:40:53
    Disabled属性的定义在HtmlControl类。Ivony... 13:41:18
    [DefaultValue(false), WebCategory("Behavior"), TypeConverter(typeof(MinimizableAttributeTypeConverter)), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public bool Disabled
    {
        get
        {
            string str = this.Attributes["disabled"];
            if (str == null)
            {
                return false;
            }
            return str.Equals("disabled");
        }
        set
        {
            if (value)
            {
                this.Attributes["disabled"] = "disabled";
            }
            else
            {
                this.Attributes["disabled"] = null;
            }
        }
    }Ivony... 13:41:47
    看得出来Disabled属性值的获取和设置都是直接操作AttributesIvony... 13:44:09
    而事实上几乎所有的Html控件的属性都是直接操作Attributes,如Ivony... 13:44:16
    [WebCategory("Appearance"), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), DefaultValue(-1)]
    public int Size
    {
        get
        {
            string s = base.Attributes["size"];
            if (s == null)
            {
                return -1;
            }
            return int.Parse(s, CultureInfo.InvariantCulture);
        }
        set
        {
            base.Attributes["size"] = HtmlControl.MapIntegerAttributeToString(value);
        }
    }
    Ivony... 13:44:32
    这是HtmlInputText的Size属性。Ivony... 13:44:58
    言归正传,HtmlSelect的Multiple属性是这么写的:
    [WebCategory("Behavior"), DefaultValue(""), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
    public bool Multiple
    {
        get
        {
            string str = base.Attributes["multiple"];
            if (str == null)
            {
                return false;
            }
            return str.Equals("multiple");
        }
        set
        {
            if (value)
            {
                base.Attributes["multiple"] = "multiple";
            }
            else
            {
                base.Attributes["multiple"] = null;
            }
        }
    }
     
    Ivony... 13:45:10
    可以看得出来,与Disabled属性完全没有任何区别。Ivony... 13:45:20
    那么区别在哪里呢?Ivony... 13:45:47
    就是特性,这是HtmlControl.Disabled的特性:
    [DefaultValue(false), WebCategory("Behavior"), TypeConverter(typeof(MinimizableAttributeTypeConverter)), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]Ivony... 13:46:12
    这个是HtmlSelect.Multiple的:
    [WebCategory("Behavior"), DefaultValue(""), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]Ivony... 13:46:47
    TypeConverter(typeof(MinimizableAttributeTypeConverter))
    这个TypeConverter,便是问题的关键。Ivony... 13:47:27
    这个TypeConverter的代码如下:
    internal class MinimizableAttributeTypeConverter : BooleanConverter
    {
        // Methods
        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
        {
            return ((sourceType == typeof(string)) || base.CanConvertFrom(context, sourceType));
        }    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
        {
            string a = value as string;
            if (a == null)
            {
                return base.ConvertFrom(context, culture, value);
            }
            return ((a.Length > 0) && !string.Equals(a, "false", StringComparison.OrdinalIgnoreCase));
        }
    }Ivony... 13:49:14
    结论,微软忘了给Multiple属性做TypeConverter从而导致了问题。
      

  14.   


    /**
      *Ivony... 13:53:25
      *将Multiple的特性加一个 TypeConverter(typeof(MinimizableAttributeTypeConverter)),应该就可以了
      *Ivony... 13:53:50
      *我莫名其妙的得一大堆分,岂不是有倒分的嫌疑?  *维也纳(wien..) 13:54:28
      *我把QQ的记录复制过去
      */
      

  15.   

    14楼的回复也不错但不好意思分只给了一个人,其他人都没给分,
    因为Ivony的比较辛苦,没有功劳,也有苦劳,呵呵~
      

  16.   

    14楼有意思。Multiple属性的set方法与Multiple在前台怎么写有关系么?有关系的是TypeConverter、ControlDesigner和Multiple属性的类型。所以,根据Multiple属性的set方法推断只能multiple = "true",未免文不对题。其次,微软当然应该写到Attributes集合中,为何要在RenderAttributes的时候插入呢?岂不是没事找事,如果对Multiple属性进行了设置而又对Attributes集合添加了Multiple属性,那么又应该以哪个为准呢?看不出微软这样做有任何不妥。更何况!Disabled属性与Multiple属性的代码完全一样(可以看上面的聊天记录)。阁下看到的HtmlButton莫非是灵异现象?其实倒不是针对阁下。只是CSDN上某些小白(如18楼),让我不得不出来在斑竹的帖子里澄清一些东西而已。
      

  17.   

    更何况,我只说了14楼对.net类库有研究, 有些人非要理解为我是说14楼是针对这个主题的回答很对应,那就不知道谁是小白了,呵呵
      

  18.   

    呵呵,LS你就承认了吧,
    Ivony是神啊,
    在神面前,
    我们不得不承认自己是小白了~
      

  19.   

    不过fcuandy,我又没得罪你,你拉我垫背有点不厚道~
      

  20.   

    引用
    无耻的VMM……