2010-08-24 67 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