ASP.NET MVC Razor render SelectList без кодирования
как я могу получить свой список выбора для рендеринга без HTML-кодирования
@{
var noiceList = new SelectList(new[] { new {ID = "", Name = ""},
new {ID = "y", Name = "Yes after3Space"},
"ID", "Name");
}
@Html.DropDownList("noice", @noiceList )
вынесено
..
<option value="y">Yes&nbsp;&nbsp;&nbsp;3Space</option>
...
как мне получить его вместо render
<option value="y">Yes after3Space</option>
3 ответов
самый простой способ достичь этого в C# - использовать \xA0
вместо
Так что вы можете избежать всего этого дополнительного кода.
это ответ: как сохранить пробелы в раскрывающемся списке - ASP.net MVC Razor views
к сожалению, это поведение не встроено. The Html.DropDownList
способ (и большинство других HtmlHelper
методы) всегда экранирует весь входной текст.
решение
однако есть обходные пути. Например, вы можете создать свой собственный метод HtmlHelper, который позволяет unescaped HTML.
но если ваши потребности так же просты, как ваш пример, Вот простой обходной путь:
Используйте заполнитель, например |
, а затем замените его на
, как это:
@{
var noiceList = new SelectList(new[] { new {ID = "", Name = ""},
new {ID = "y", Name = "Yes|||after3Space"},
"ID", "Name");
}
@Html.Raw(Html.DropDownList("noice", @noiceList).ToString().Replace("|", " "))
обратите внимание, вы также можете создать простой метод расширения, чтобы действительно уменьшить количество кода:
public static HtmlString Replace(this HtmlString input, string findAll, string replaceWith) {
return new HtmlString(input.ToString().Replace(findAll, replaceWith));
}
это упрощает ваш HTML-код:
@Html.DropDownList("noice", @noiceList).Replace("|", " ")
это потому, что Razor всегда выводит кодированный сущностью html. Вы должны иметь возможность звонить (VS обновляется на моей машине прямо сейчас, поэтому я не могу сделать быстрый тест) Html.Raw()
в этом контексте, например, так:
var noiceList = new SelectList(new[] { new {ID = "", Name = ""},
new {ID = "y", Name = Html.Raw("Yes after3Space")},
"ID", "Name");
EDIT: это не работает.