如何缩进MultiSelectBox中的值?

问题描述

| 我在Razor MultiSelectBox中创建缩进项时遇到问题。 当我手动编写HTML时,它可以完美工作:
<select name=\"testfoo123\" multiple=\"multiple\" size=\"15\">
    <option value=\"PARENT1\">Parent</option>
    <option value=\"CHILD1\">&nbsp;I am indented</option>
    <option value=\"CHILD2\">&nbsp;I am indented</option>
    <option value=\"PARENT1\">Parent2</option>
    <option value=\"CHILD1\">&nbsp;I am indented</option>
    <option value=\"CHILD2\">&nbsp;I am indented</option>
</select>
但是,Razor的HTML帮助器实际上以表格形式显示了前面的不间断空格。如预期的那样,缩进的文字空间\'\'字符被完全忽略。 我用来生成多选框的代码如下:
@Html.ListBoxFor(model => mySelectedValues,new MultiSelectList(myValues),new { size = \"15\" })
    

解决方法

        我找到了解决方案。第一:对于树状控件,多选框可能不是最佳选择,但我将把决定权留给程序员。 解决方案:添加文字不间断空格字符。这些没有经过过滤,但是HTML等效项(以及普通的空格字符)已过滤。
const char nonBreakingSpace = \'\\u00A0\';
给每个孩子添加这个角色。以一个单独的列表为例:
var sendMeToTheHtmlHelper = new List<String>();
foreach(String yourString in yourCollection) {
    // If this element is a child and needs indentation:
    sendMeToTheHtmlHelper.Add(nonBreakingSpace + location);
    // else just add as normal
}
    ,        网页和MVC中的内置HTML帮助器都会自动对所有输入值进行HTML编码。我很确定没有任何办法可以使用内置帮助程序使您的方案正常工作。 但是,幸运的是,作为MVC源代码发行的一部分,可以在CodePlex网站上找到这些帮助程序的所有源代码。您可以查看该源代码,并编写一个更适合于您具有缩进方案的自定义帮助程序。