ASP.NET MVC Razor визуализирует SelectList без кодирования - PullRequest
9 голосов
/ 15 сентября 2011

Как я могу получить список выбора для отображения без HTML-кодирования

@{
    var noiceList = new SelectList(new[] { new {ID = "", Name = ""}, 
                                   new {ID = "y", Name = "Yes   after3Space"}, 
                 "ID", "Name"); 
 }
 @Html.DropDownList("noice", @noiceList )

render

..
<option value="y">Yes&amp;nbsp;&amp;nbsp;&amp;nbsp;3Space</option>
...

Как мне получить его вместо визуализации

<option value="y">Yes&nbsp;&nbsp;&nbsp;after3Space</option>

Ответы [ 3 ]

12 голосов
/ 11 октября 2012

Самый простой способ добиться этого в C # - это использовать \xA0 вместо &nbsp;, чтобы вы могли избежать всего лишнего кода.

В этом ответе говорится: Как сохранить пробелыв DropDownList - просмотры ASP.net MVC Razor

3 голосов
/ 28 декабря 2011

К сожалению, это поведение не является встроенным.Метод Html.DropDownList (и большинство других методов HtmlHelper) всегда экранирует весь вводимый текст.

Обходной путь

Однако есть обходные пути.Например, вы можете создать свой собственный метод HtmlHelper, который разрешает неэкранированный HTML.

Но если ваши потребности так же просты, как ваш пример, вот простой обходной путь:
Используйте заполнитель, такой как |, а затем замените его на &nbsp;, например:

@{
    var noiceList = new SelectList(new[] { new {ID = "", Name = ""}, 
                                   new {ID = "y", Name = "Yes|||after3Space"}, 
                 "ID", "Name"); 
 }
 @Html.Raw(Html.DropDownList("noice", @noiceList).ToString().Replace("|", "&nbsp;"))

Обратите внимание, вы также можете создать простой метод расширения, чтобы реально сократить объем требуемого кода:

 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("|", "&nbsp;")
0 голосов
/ 28 декабря 2011

Это потому, что Razor всегда выводит html в кодировке объекта. Вы должны иметь возможность звонить (VS обновляется на моем компьютере прямо сейчас, поэтому я не могу выполнить быстрый тест) Html.Raw() в этом контексте, например:

var noiceList = new SelectList(new[] { new {ID = "", Name = ""}, 
                               new {ID = "y", Name = Html.Raw("Yes&nbsp;&nbsp;&nbsp;after3Space")}, 
             "ID", "Name");

РЕДАКТИРОВАТЬ: Это не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...