开发者

ASP.NET annoying URL encoding strings

开发者 https://www.devze.com 2023-01-12 17:27 出处:网络
I have this small function: // Adds to menu public void addMenuToList(int menuVal, string menuTxt, int depth, bool hasChildren)

I have this small function:

// 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);
}

Which then goes on to create the following 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>

It's url enc开发者_运维百科oding the &nbsp; to &amp;nbsp; which spoils the formatting of the rendered select box. Any ideas how to prevent this happening? I need preliminary spaces in the options.


Try following:

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

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

EDIT: nbsp is character with UTF-8 U+00A0 value (eg. it renders as a space, but isn't considered as a space by any of IsSpace method variants)


As far as I know you'll have to iterate the DropDownList's Items collection and call HttpUtility.HttpDecode on each option's Text property. I don't believe there's a way to prevent HTTP encoding for text values.

As an aside, do you know about the OPTGROUP tag? Unfortunately it cannot be nested (yet) but it may cover some of your cases:

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

-Oisin


I would format the spacing with css ... essentially you don't need text, you just want to format the options visually ...


The text is being double-HTMLEncoded for some reason.

Try this:

// 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

精彩评论

暂无评论...
验证码 换一张
取 消