最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在asp.net下實現(xiàn)Option條目中填充前導(dǎo)空格的方法

 更新時間:2007年03月08日 00:00:00   作者:  
在使用Web頁面上的下拉列表框(SELECT element)顯示數(shù)據(jù)列表時,有時我們會遇到有層次的數(shù)據(jù)條目。比如論壇中的子論壇和它的分類之間,以及一些具有包含關(guān)系的層次數(shù)據(jù)條目。使下拉列表框中,不同的level有一定的顯示縮進(jìn)將是非常友好的一種排版方式。

    如果在HTML編寫狀態(tài)下,或在ASP等腳本語言中,制作這樣的下拉列表窗口非常容易。我們知道空格" "在Option標(biāo)簽的前后是會被brower的顯示引擎自動忽略掉的,所以我們使用硬空格 就可以了,效果如下圖:
    Select01.png
<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>

    如此簡單就實現(xiàn)這個效果了,似乎沒有什么可說的。可是當(dāng)我們在ASP.NET中使用服務(wù)器控件ListBox或DropDownList的時候,要實現(xiàn)這個效果問題就來了。由于ListItem類的Text屬性在輸出為HTML代碼的時候,會自動進(jìn)行HtmlEncode轉(zhuǎn)換,我們上面的示例會被輸出為
    Select02.png
<select>
    
<option value="0">Level 00</option>
    
<option value="1">&amp;nbsp;Level 01</option>
    
<option value="2">&amp;nbsp;&amp;nbsp;Level 02</option>
    
<option value="3">&amp;nbsp;&amp;nbsp;&amp;nbsp;Level 03</option>
    
<option value="4">&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Level 04</option>
</select>

    真是讓人郁悶,我第一次遇到這個問題時,使用了一個很ugly的方法來解決。就是重載控件,在Render的時候把"&amp;nbsp;"變回為"&nbsp;"。大概就是:
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(
"&amp;nbsp;""&nbsp;");
        writer.Write(strb.ToString());
    }

}

    這個解決方案問題很多,效率是一回事,并且非常不完備。除了使用這種"野蠻"的修改Render結(jié)果的方法,還有一個也是ugly的方法是使用全角的Space,就是" "。不過在中文的系統(tǒng)中這種方法似乎也說的過去,可是在純英文(Not support East-Asian language)的環(huán)境下,這樣的Option條目就暈菜了,錯誤效果如下圖:
    Select03.png
    // 左圖是在中文系統(tǒng)中,右圖是在純英文系統(tǒng)中

    那么怎么辦呢?重載ListItem?! 不過此路不通,ListItem類是被sealed修飾的。后來我發(fā)現(xiàn),可以使用&nbsp;的"原始形式"來讓DropListBox輸出正確的HTML代碼。什么是&nbsp;的原始形式呢?&nbsp;這個東西本來是在RFC 1866中定義的named entity,全稱叫做:no-break space,CDATA格式為:&#160;。我們把160作為字符放入ListItem的Text中,就能得到正確的HTML輸出,效果和第一幅圖中的HTML示例效果相同。服務(wù)器端代碼為:
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">&#160;Level 01</option>
    
<option value="2">&#160;&#160;Level 02</option>
    
<option value="3">&#160;&#160;&#160;Level 03</option>
    
<option value="4">&#160;&#160;&#160;&#160;Level 04</option>
</select>

相關(guān)文章

  • ASP.NET中上傳并讀取Excel文件數(shù)據(jù)示例

    ASP.NET中上傳并讀取Excel文件數(shù)據(jù)示例

    如何打開Excel數(shù)據(jù)庫文件,想必有很多朋友都不清楚吧,下面通過一個簡單的例子,實現(xiàn)讀取Excel數(shù)據(jù)文件
    2014-05-05
  • .Net中關(guān)于stirng轉(zhuǎn)System.Type的一種實現(xiàn)思路詳解

    .Net中關(guān)于stirng轉(zhuǎn)System.Type的一種實現(xiàn)思路詳解

    這篇文章主要給大家介紹了.Net中關(guān)于stirng轉(zhuǎn)System.Type的一種實現(xiàn)思路的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • Asp.net中防止用戶多次登錄的方法

    Asp.net中防止用戶多次登錄的方法

    在web開發(fā)時,有的系統(tǒng)要求同一個用戶在同一時間只能登錄一次,也就是如果一個用戶已經(jīng)登錄了,在退出之前如果再次登錄的話需要報錯。
    2008-08-08
  • .NET讀寫Excel工具Spire.Xls使用 Excel文件的控制(2)

    .NET讀寫Excel工具Spire.Xls使用 Excel文件的控制(2)

    這篇文章主要為大家詳細(xì)介紹了.NET讀寫Excel工具Spire.Xls使用,Excel文件的控制,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 淺談asp.net Forms身份驗證詳解

    淺談asp.net Forms身份驗證詳解

    這篇文章主要介紹了淺談asp.net Forms身份驗證詳解 ,這種方法可以輕松的保持用戶的登錄狀態(tài)(如果用戶想這樣),便捷的用戶授權(quán)配置,增強(qiáng)的安全性,有興趣的可以了解一下。
    2016-12-12
  • asp.net Repeater控件的說明及詳細(xì)介紹及使用方法

    asp.net Repeater控件的說明及詳細(xì)介紹及使用方法

    Repeater控件是Web 服務(wù)器控件中的一個容器控件,它使您可以從頁的任何可用數(shù)據(jù)中創(chuàng)建出自定義列表。
    2010-04-04
  • 水晶報表asp.net的webform下基本用法實例

    水晶報表asp.net的webform下基本用法實例

    這篇文章主要介紹了水晶報表asp.net的webform下基本用法,實例講述了asp.net中水晶報表的創(chuàng)建與使用方法,非常具有實用價值,需要的朋友可以參考下
    2014-11-11
  • .NET?6中間件Http?Logging使用介紹

    .NET?6中間件Http?Logging使用介紹

    這篇文章介紹了.NET?6中間件Http?Logging的使用方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • asp.net實現(xiàn)的計算網(wǎng)頁下載速度的代碼

    asp.net實現(xiàn)的計算網(wǎng)頁下載速度的代碼

    剛看到有人給出asp.net實現(xiàn)的計算網(wǎng)頁下載速度的方法,本方法未經(jīng)本人測試,不知道能否可靠性如何。準(zhǔn)確來說,這只是個思路吧
    2013-03-03
  • .NET Core跨平臺執(zhí)行命令、腳本的方法詳細(xì)

    .NET Core跨平臺執(zhí)行命令、腳本的方法詳細(xì)

    這篇文章主要給大家介紹了關(guān)于.NET Core跨平臺執(zhí)行命令、腳本的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05

最新評論

长子县| 松溪县| 平南县| 日照市| 城固县| 阿勒泰市| 汾西县| 姜堰市| 中卫市| 于田县| 云南省| 永平县| 鹤峰县| 双辽市| 平安县| 九寨沟县| 阳山县| 秦皇岛市| 龙井市| 舟山市| 方正县| 弋阳县| 海林市| 浦北县| 丽江市| 商南县| 长宁区| 冕宁县| 紫阳县| 和政县| 淮南市| 璧山县| 乐山市| 静海县| 宣武区| 句容市| 上饶市| 龙江县| 安达市| 维西| 新营市|