我有这个小功能:
// Adds to menu
public void addMenuToList(int menuVal, string menuTxt, int depth, bool hasChildren)
{
for (int i = 0; i < depth; i++)
{
menuTxt = " " + 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">&nbsp;&nbsp;Wrapping</option>
<option value="8"> + &nbsp;&nbsp;&nbsp;&nbsp;All Products</option>
</select>
这是将
编码为&nbsp;
的网址,这会破坏呈现的选择框的格式。任何想法如何防止这种情况发生?我需要选项中的初步空格。
答案 0 :(得分:7)
请尝试以下操作:
string space = Server.HtmlDecode(" ");
for (int i = 0; i < depth; i++)
{
menuTxt = space + menuTxt;
}
编辑:nbsp是具有UTF-8 U + 00A0值的字符(例如,它呈现为空格,但不被任何IsSpace
方法变体视为空格)
答案 1 :(得分:1)
据我所知,你必须迭代DropDownList的Items集合,并在每个选项的Text属性上调用HttpUtility.HttpDecode。我不相信有办法阻止文本值的HTTP编码。
顺便说一下,你知道OPTGROUP标签吗?不幸的是它不能嵌套(但)它可能会涵盖你的一些情况:
http://htmlhelp.com/reference/html40/forms/optgroup.html
-Oisin
答案 2 :(得分:0)
我会用css格式化间距...基本上你不需要文字,你只想在视觉上格式化选项......
答案 3 :(得分:0)
由于某种原因,文本被双重HTMLEncoded。
试试这个:
// Adds to menu
public void addMenuToList(int menuVal, string menuTxt, int depth, bool hasChildren)
{
for (int i = 0; i < depth; i++)
{
menuTxt = " " + menuTxt;
}
if (hasChildren) { menuTxt = " + " + menuTxt; }
ListItem newItem = new ListItem(menuVal.ToString(), menuTxt);
parent.Items.Add(newItem);
}