全国统一热线:
028-86758058
18980748058
购买流程
付款方式
常见问题
在线提问
续租服务
购物车(
0
件)
用户名:
密 码:
记住
首 页
HOME
域名注册
DOMAIN
虚拟主机
WEB HOST
成品网站超市
AUTO Site
VPS主机
VPS SERVER
云 主 机
CLOUD HOST
租用托管
SERVER
海外主机
HK HOST
代理专区
AGENT
客服中心
SERVICE
站长教程
SERVICE
欢迎光临西部数据云计算中心,我们将竭诚为您提供最优质的服务!
中文域名
域名转入
域名转出
DNS管理
动态域名
获取域名证书
域名停放
域名过户
集群主机
双线主机
基本主机
港台主机
论坛主机
Linux主机
Vip合租主机
超G型主机
ASP.net主机
Java主机
智能建站主机
网店主机
美国主机
数据库
成品网站超市
智能建站主机
集群VPS主机
国内VPS主机
香港VPS主机
美国VPS主机
云主机介绍
云主机购买
服务器租用
主机托管
常见问题
香港主机
港台主机
美国主机
国内免备案
步骤流程
代理级别
代理合同
代理模式
代理优势
在线申请
产品列表
常见问题
代理商分布图
常见问题
有问必答
跟踪提问
购买流程
产品价格
付款方式
常用软件
网站备案
续租服务
汇款确认
相关文档
联系我们
域名资讯
主机资讯
行业动态
网页制作
php教程
mysql教程
域名资讯
云计算资讯
网络编程
您当前的位置:
首页
>
网络编程
>
Net教程
在asp.net下实现Option条目中填充前导空格的方法
时间:2015-01-29 来源:互联网 作者:佚名
在使用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下实现Option条目中填充前
在使用Web页面上的下拉列表框(SELECT element)显示数据列表时
nunit使用指南之—NUnit Quick Sta
NUnit 是为 .NET 框架生成的开放源代码单元测试框架。NUnit
相关文章
无相关信息
栏目更新
栏目热门
返回首页
关于我们
联系我们
付款方式
价格总览
资讯中心
友情链接
媒体关注
有问必答
投诉建议
网站备案
《中华人民共和国增值电信业务经营许可证》编号:川B2-20080058号
官方网址:
xibushuju.com
西部数据
Copyright © 2002~2015
天府快车
版权所有
电话总机:
028-86758058
(50线) 传真:
028-86758058