用于 ASP.NET的ComboBox控件

分享于 

8分钟阅读

Web开发

  繁體 雙語

介绍

在 ASP.NET 中使用服务器控件非常灵活。 拥有健壮的编程模型与HTML元素交互无疑使生命变得美好。 尽管 ASP.NET 附带了你可能需要的所有最常用的服务器控件,但是添加到你的工具箱总是很有趣的。 这个 ComboBox 控件从WinForms世界模拟ComboBoxes的功能- 让用户从预先定义的选项列表中选择,或者输入一个新值。

可替换项

这不是因特网上 ComboBox 功能的第一个或者惟一的实现,甚至在代码项目中也。 本文提供了一个解决方案,但它基于微软行为,使它的具体化,并且使用定制图像模拟下拉箭头。

这个文章提供了一个视觉上看起来像真实的解决方案 <选择> 但是我想要一个完整的跨浏览器 支持,并且不想处理额外的. htc 文件。

我还无意中发现了来自于的这个实现。 它的兼容性和兼容性都很好,但它仍然不像普通的HTML元素,它在加载浏览器时在浏览器中使用了令人讨厌的。

最后,我发现一个非常圆滑的实现来自于 Geek,这似乎是我寻找的东西。 它看起来像一个真实 <选择> 在老的浏览器中,box似乎 degrade。 不过,这是一个商业产品,我想要一些可以调整自己的东西。 我想自己-"我想我得自己写了。"。 所以我做了。

突出显示

在开发这个控件时,我在脑海中有几个设计目标:

  • 必须与所有当前生成浏览器兼容。
  • 在旧的浏览器中,( 并提供基本功能) 必须优雅地降级。
  • 必须自包含,以便将它的拖放到页面和'工时'上。
  • 必须支持标准 DropDownList 控件的所有属性,包括所有视觉样式。数据绑定和使用 Validator 控件。
  • 不能有任何布局显示限制。 ( 例如。绝对定位。side-by-side定位和 等等 )

希望在下载和尝试附加代码时,你会发现所有这些标准都已经得到满足。 示例网页演示了几种可以使用 ComboBox 控件的场景。 也就是说我还没有尝试每一个可能存在的疯狂场景。 如果你发现这里控件无法执行或者建议改进,请在这里张贴你的评论,我将更新代码。

更新- 自动填充

一些人问我这个控制是否支持'自动填充'技术,如谷歌建议的那样。 我增加了对这里技术的简单版本的支持。 通过将 EnableAutoFill 属性设置为 true 控件将自动用预先定义的值作为用户键入的值来填充。 ( 不过,不同于Google建议,选项列表不是通过每个击键动态生成的)。 让我知道你喜欢它。

更新- 设计时间支持和更多

我的缺点是我忽略了将设计时间属性添加到我上传的类文件。 这已经被修正了,所以现在该控件有完整的设计。 此外,我修复了使自动填写案例敏感的问题。 请再次下载代码,以获取这两个修复。

。selecteditem和。属性

我根据 Pinndulum ( 查看下面的文章)的建议和代码示例上传了一个新版本的控件,它更好地利用控件的.SelectedItem.SelectedValue 属性。 现在,文本值和所选 ListItem的值都以编程方式可用。 感谢 Pinndulum !

更新- SelectedIndexChanged未触发- 固定

当控件设置为 AutoPostBack 时,SelectedIndexChanged 事件未被激发。 这是由于一些JavaScript重置了selectedIndex属性 onchange。 尽管这是正确的行为,但是 SelectedIndexChanged 事件更重要,所以我注释了错误的行。 ( 感谢CGRothrock查找这里 Bug )。

更新- 对'gridlayout'支持'

当控件放置在使用GridLayout格式的页面时,控件不会在正确的位置呈现。 Bug 是由于设计器应用的定位在渲染时丢失的事实。 ( 感谢TWheelhouse找到了这个 Bug 并建议修复)。

更新- 添加对外部JavaScript和 Bug 修复的支持

经过几个建议,我增加了 finally 对外部JavaScript文件的支持。 如果将 ExternalResourcePath 属性设置为有效. js 文件的位置,则该控件将使用该属性而不是发出 JavaScript inline。 另外,我认为 Firefox 呈现/selectedindex问题 finally 有一个可以接受的解决方案。 感谢所有帮助这里更新的想法和修复。

片尾

我感谢本文提到的它的他文章的作者,为我提供创建这里控件的想法。 必须给开发人员提供特殊的信用,以便提供这样一个灵活的实现,我想要的是。 检查他们的一些JavaScript还提供了有价值的建议,这些建议在 IE 浏览器中解决了讨厌的1-pixel 间距问题。 = )

历史记录

  • 05.27.2005
    • 发布的初始版本。
  • 06.02.2005
    • 已经发布自动填充支持的新版本。
    • 支持设计时支持的新版本。
  • 06.03.2005
    • Pinndulum的新版本建议对 .SelectedItem.SelectedValue 属性进行更改。
    • 删除 .Width 属性必须设置为以像素表示值的限制的新版本。
  • 06.06.2005
    • 固定两个 Bug: 一个处理 SelectedIndexChanged 事件而另一个处理 ItemCommand 事件未触发( 感谢CGRothrock和 Farooq Azam找到这些)。
  • 06.07.2005
    • 修复了使控件与'gridlayout'不兼容的Bug。 ( 感谢TWheelhouse找到了这个 Bug 并建议修复。)
  • 06.09.2005
    • 修正了在 Firefox ( 几天前 .SelectedValue 修复程序被引入的一个 Bug ) 中产生一些有趣的渲染的Bug。 现在两个项目都应该是固定的。
  • 06.10.2005
    • 新版本支持链接到外部JavaScript而不是发出 inline。 也增强了 Firefox 呈现/selectedindex问题( 感谢Bryan的建议修正)。
  • 06.13.2005
    • 新版本将 ComboBox 控制代码分离成独立项目,并包含控件的预先编译版本。 也修复了 Bug,其中 ExternalResourcePath 属性在设计器中不可见。
  • 06.17.2005
    • 通过设计器( 感谢RSBCTrumpet找到这个 Bug ) 设置时,用 MaxLength 属性固定了一个 Bug。

COM  控制  asp  asp-net  组合框  
相关文章