如何在MultiSelectBox中缩进值?

时间:2011-06-13 17:18:10

标签: c# asp.net-mvc-3 razor

我在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" })

2 个答案:

答案 0 :(得分:3)

我找到了解决方案。第一:多选框可能不是树状控件的最佳选择,但我会把这个决定留给程序员。

解决方案:添加文字不间断空格字符。这些不会被过滤,但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
}

答案 1 :(得分:0)

Web页面和MVC中的内置HTML帮助程序自动HTML编码所有输入值。我很确定没有办法让你的场景使用内置帮助器工作。

幸运的是,这些帮助程序的所有源代码都可以作为MVC source code release的一部分在CodePlex网站上获得。您可以查看该源代码并编写一个更好地针对您的缩进方案的自定义帮助程序。