首页
学习
软文
网站
阅读
广
告
免费收录各行各业网站
在线玩玩经典扫雷游戏
免外链纯文本网站目录
百度sem账户优化技巧
我是空闲的广告位置哦
b2b网站大全
企业区
我是空闲的广告位置哦
我是空闲的广告位置哦
贪吃蛇!我也来玩玩!
免费在线看电影电视剧
我是空闲的广告位置哦
中国书画艺术行业门户
我是空闲的广告位置哦
我是空闲的广告位置哦
SEM有效关键词
消防维修
我是空闲的广告位置哦
我是空闲的广告位置哦
我是空闲的广告位置哦
我是空闲的广告位置哦
我是空闲的广告位置哦
ICP许可证
国际展会代参展
ASP.NET
IOS开发
android开发
PHP编程
JavaScript
ASP.NET
ASP编程
JSP编程
Java编程
易语言
Ruby编程
Perl编程
AJAX
正则表达式
C语言
编程开发
在asp.net下实现Option条目中填充前导空格的方法
2018-05-03 14:17:15
次阅读
稿源:
互联网
广告
在使用Web页面上的下拉列表框(SELECT element)显示数据列表时,有时我们会遇到有层次的数据条目。比如论坛中的子论坛和它的分类之间,以及一些具有包含关系的层次数据条目。使下拉列表框中,不同的level有一定的显示缩进将是非常友好的一种排版方式。
如果在HTML编写状态下,或在ASP等脚本语言中,制作这样的下拉列表窗口非常容易。我们知道空格" "在Option标签的前后是会被brower的显示引擎自动忽略掉的,所以我们使用硬空格 就可以了,效果如下图:
<
select
>
<
option
value
="0"
>
Level 00
</
option
>
<
option
value
="1"
>
Level 01
</
option
>
<
option
value
="2"
>
Level 02
</
option
>
<
option
value
="3"
>
Level 03
</
option
>
<
option
value
="4"
>
Level 04
</
option
>
</
select
>
如此简单就实现这个效果了,似乎没有什么可说的。可是当我们在ASP.NET中使用服务器控件ListBox或DropDownList的时候,要实现这个效果问题就来了
。由于ListItem类的Text属性在输出为HTML代码的时候,会自动进行HtmlEncode转换,我们上面的示例会被输出为
:
<
select
>
<
option
value
="0"
>
Level 00
</
option
>
<
option
value
="1"
>
&
nbsp;Level 01
</
option
>
<
option
value
="2"
>
&
nbsp;
&
nbsp;Level 02
</
option
>
<
option
value
="3"
>
&
nbsp;
&
nbsp;
&
nbsp;Level 03
</
option
>
<
option
value
="4"
>
&
nbsp;
&
nbsp;
&
nbsp;
&
nbsp;Level 04
</
option
>
</
select
>
真是让人郁闷,我第一次遇到这个问题时,使用了一个很ugly的方法来解决。就是重载控件,在Render的时候把" "变回为" "。大概就是:
class
XxxDropDownList : DropDownList
{
protected
override
void
Render(HtmlTextWriter writer)
{
StringBuilder strb
=
new
StringBuilder();
StringWriter sw
=
new
StringWriter(strb);
HtmlTextWriter htw
=
new
HtmlTextWriter(sw);
base
.Render(htw);
strb.Replace(
"
"
,
"
"
);
writer.Write(strb.ToString());
}
}
这个解决方案问题很多,效率是一回事,并且非常不完备。除了使用这种"野蛮"的修改Render结果的方法,还有一个也是ugly的方法是使用全角的Space,就是" "。不过在中文的系统中这种方法似乎也说的过去,可是在纯英文(Not support East-Asian language)的环境下,这样的Option条目就晕菜了,错误效果如下图:
// 左图是在中文系统中,右图是在纯英文系统中
那么怎么办呢?重载ListItem?! 不过此路不通,ListItem类是被sealed修饰的
。后来我发现,可以使用 的"原始形式"来让DropListBox输出正确的HTML代码。什么是 的原始形式呢? 这个东西本来是在RFC 1866中定义的named entity,全称叫做:no-break space,CDATA格式为: 。我们把160作为字符放入ListItem的Text中,就能得到正确的HTML输出,效果和第一幅图中的HTML示例效果相同。服务器端代码为:
char
nbsp
=
(
char
)
0xA0
;
for
(
int
i
=
0
; i
<
5
;
++
i )
{
ddl3.Items.Add(
new
ListItem(
"
Level 0
"
.PadLeft(i
+
7
, nbsp)
+
i
, i.ToString()));
}
生成的客户端代码为:
<
select
>
<
option
value
="0"
>
Level 00
</
option
>
<
option
value
="1"
>
Level 01
</
option
>
<
option
value
="2"
>
Level 02
</
option
>
<
option
value
="3"
>
Level 03
</
option
>
<
option
value
="4"
>
Level 04
</
option
>
</
select
>
点赞
收藏
一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。
广告
广告
最新ASP.NET
ASP.NET 导出到Excel时保留换行的代码
Asp.Net 重定向必须要知道的一些资料
ASP.NET Ajax级联DropDownList实现代
asp.net DataGrid控件中弹出详细信息
Asp.Net Cache缓存使用代码
asp.net Web Services上传和下载文件
AjaxControlToolKit 显示浏览者本地语
.NET 数据库连接池
GridView单元格合并
ASP.NET 2.0写无限级下拉菜单
广告
热点ASP.NET
ASP.NET编程中的十大技巧
asp.net Web Services上传和下载文件
在ASP/ASP.NET 中处理客户端数字证书
配置.net 3.0开发环境
ASP.NET使用正则表达式屏蔽垃圾信息
ASP.NET 绑定DataSet中的多个表
AjaxControlToolKit 显示浏览者本地语
ASP.NET Ajax级联DropDownList实现代
ASP.NET 导出到Excel时保留换行的代码
在ASP.NET应用中插入flash动画