菜鸟提问,服务器端select控件如何设置可多选

viena 2007-11-20 12:03:56
我是在属性列表里选的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
...全文
417 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
shoushii 2007-11-21
  • 打赏
  • 举报
回复
引用
无耻的VMM……
Ivony 2007-11-21
  • 打赏
  • 举报
回复
无耻的VMM……
seedling_lq 2007-11-21
  • 打赏
  • 举报
回复
看来我是不应该在大师面前发表什么见解,对神敬而远之
fcuandy 2007-11-21
  • 打赏
  • 举报
回复
不好意思,我不说了. 水平菜不是我的错,出来吓人不是我的不对了.
viena 2007-11-21
  • 打赏
  • 举报
回复
不过fcuandy,我又没得罪你,你拉我垫背有点不厚道~
viena 2007-11-21
  • 打赏
  • 举报
回复
呵呵,LS你就承认了吧,
Ivony是神啊,
在神面前,
我们不得不承认自己是小白了~
fcuandy 2007-11-21
  • 打赏
  • 举报
回复
更何况,我只说了14楼对.net类库有研究, 有些人非要理解为我是说14楼是针对这个主题的回答很对应,那就不知道谁是小白了,呵呵
fcuandy 2007-11-21
  • 打赏
  • 举报
回复
嗯.我是小白的话,那依21楼的回贴,那就不止我一个了.什么都不说了.

我不针对谁.不像有的人对人不对事.
Ivony 2007-11-21
  • 打赏
  • 举报
回复
14楼有意思。

Multiple属性的set方法与Multiple在前台怎么写有关系么?

有关系的是TypeConverter、ControlDesigner和Multiple属性的类型。所以,根据Multiple属性的set方法推断只能multiple = "true",未免文不对题。

其次,微软当然应该写到Attributes集合中,为何要在RenderAttributes的时候插入呢?岂不是没事找事,如果对Multiple属性进行了设置而又对Attributes集合添加了Multiple属性,那么又应该以哪个为准呢?看不出微软这样做有任何不妥。更何况!Disabled属性与Multiple属性的代码完全一样(可以看上面的聊天记录)。阁下看到的HtmlButton莫非是灵异现象?



其实倒不是针对阁下。

只是CSDN上某些小白(如18楼),让我不得不出来在斑竹的帖子里澄清一些东西而已。
syeerzy 2007-11-21
  • 打赏
  • 举报
回复
倒粪倒粪啊,哈哈
elvis_gao 2007-11-20
  • 打赏
  • 举报
回复
<select id="Select1" runat="server">
<option></option>
</select>是服务器控件中的dropdownlist

<select id="Select1" runat="server" multiple="multiple">
<option></option>
</select>是服务器控件中的ListBox,应该不会有问题的
北京的雾霾天 2007-11-20
  • 打赏
  • 举报
回复
生成的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]
pineapplemi 2007-11-20
  • 打赏
  • 举报
回复
同上
北京的雾霾天 2007-11-20
  • 打赏
  • 举报
回复

<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>
ETstudio 2007-11-20
  • 打赏
  • 举报
回复
<select id="Select1" runat="server" multiple="true" style="width: 344px">
viena 2007-11-20
  • 打赏
  • 举报
回复
14楼的回复也不错

但不好意思分只给了一个人,其他人都没给分,
因为Ivony的比较辛苦,没有功劳,也有苦劳,呵呵~
viena 2007-11-20
  • 打赏
  • 举报
回复

/**
*Ivony... 13:53:25
*将Multiple的特性加一个 TypeConverter(typeof(MinimizableAttributeTypeConverter)),应该就可以了
*Ivony... 13:53:50
*我莫名其妙的得一大堆分,岂不是有倒分的嫌疑?

*维也纳(wien..) 13:54:28
*我把QQ的记录复制过去
*/
viena 2007-11-20
  • 打赏
  • 举报
回复

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属性值的获取和设置都是直接操作Attributes

Ivony... 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从而导致了问题。
fcuandy 2007-11-20
  • 打赏
  • 举报
回复
近期看到过14楼朋友的一些回贴,对.net类库研究的比较深啊
honey52570 2007-11-20
  • 打赏
  • 举报
回复
<input id="sb" checked="true" runat="server" type="radio" />
加载更多回复(11)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧