2010-08-24 66 views
4

我有這個小功能:ASP.NET惱人的URL編碼字符串

// Adds to menu 
public void addMenuToList(int menuVal, string menuTxt, int depth, bool hasChildren) 
{ 
    for (int i = 0; i < depth; i++) 
    { 
     menuTxt = "&nbsp;" + menuTxt; 
    } 
    if (hasChildren) { menuTxt = " + " + menuTxt; } 

    ListItem newItem = new ListItem(); 
    newItem.Text = menuTxt; 
    newItem.Value = menuVal.ToString(); 
    parent.Items.Add(newItem); 
} 

,然後繼續創建以下HTML:

<select size="4" name="ctl00$mainContent$parent" id="ctl00_mainContent_parent" class="tbox widebox"> 
    <option selected="selected" value="0">Top Level</option> 
    <option value="1"> + Boxes</option> 
    <option value="2">&amp;nbsp;&amp;nbsp;Wrapping</option>  
    <option value="8"> + &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;All Products</option> 
</select> 

它的編碼&nbsp;&amp;nbsp;這敗壞了網址格式化呈現的選擇框。任何想法如何防止這種情況發生?我需要選項中的初步空間。

+0

如果你只是使用情況「是什麼」,而不是「 」? – Mike 2010-08-24 13:52:57

+0

空字符不會在選擇框中呈現爲初步字符。 HTML似乎只允許一個,而且你必須使用  – 2010-08-24 13:53:45

回答

7

嘗試以下:

string space = Server.HtmlDecode("&nbsp;"); 

for (int i = 0; i < depth; i++) 
{ 
    menuTxt = space + menuTxt; 
} 

編輯:NBSP是字符使用UTF-8 U + 00A0值(例如,它呈現爲一個空間,但並不是根據IsSpace方法變體中的任何一個被視爲空間)

+0

+1有趣。 – x0n 2010-08-24 13:53:57

+0

完美,謝謝! – 2010-08-24 13:56:24

0

我會格式化間距與三網融合本質上你不需要文本,你只是想在視覺上格式化選項...

+0

我不認爲可以格式化單個列表選項嗎?或者,也許是。無論哪種方式,它不會伸縮n深度的東西。 – 2010-08-24 13:55:31

0

文本正在被雙HTMLEncoded出於某種原因。

嘗試這種情況:

// Adds to menu 
    public void addMenuToList(int menuVal, string menuTxt, int depth, bool hasChildren) 
    { 
     for (int i = 0; i < depth; i++) 
     { 
      menuTxt = "&nbsp;" + menuTxt; 
     } 
     if (hasChildren) { menuTxt = " + " + menuTxt; } 

     ListItem newItem = new ListItem(menuVal.ToString(), menuTxt); 
     parent.Items.Add(newItem); 
    } 
+0

感謝您的回覆,但不起作用 – 2010-08-24 13:54:56

1

據我所知,您必須迭代DropDownList的Items集合並在每個選項的Text屬性上調用HttpUtility.HttpDecode。我不相信有一種方法可以防止對文本值進行HTTP編碼。

另外,你知道OPTGROUP標籤嗎?不幸的是它不能嵌套(還),但它可能覆蓋你的一些情況:

http://htmlhelp.com/reference/html40/forms/optgroup.html

-Oisin

+0

謝謝你,這是正確的優秀答案,並提醒我一個我不經常使用的html元素,這會更好。我只接受其他答案,因爲他是第一個:) – 2010-08-24 14:06:23