Html.Encode () не кодирует пробел

На моем веб-сайте asp.net-mvc у меня есть поле, которое обычно содержит строку (из базы данных), но время от времени может ничего не содержать. Поскольку IE не знает, как обрабатывать тег css "empty-cells", пустые ячейки таблицы необходимо заполнить с помощью & nbsp;
. я думал

Html.Encode(" ");

исправил бы это для меня, но, по-видимому, он просто возвращает "". Я мог бы реализовать эту логику следующим образом

Html.Encode(theString).Equals(" ")?" ":Html.Encode(theString);

Также можно было бы использовать нестандартное «если», но, честно говоря, оба варианта уродливы. Нет ли более удобочитаемого и компактного способа разместить там это дополнительное пространство?

пришлось разбить & NBSP; потому что представление SO отображает его как HTML

Boris Callens 29.12.2008 13:50

Пожалуйста, избегайте строчки "... нужно заполнить, я думал ..."

M.N 29.12.2008 13:57

По соображениям эффективности избегайте вызова Html.Encode дважды.

kgiannakakis 29.12.2008 13:58

Не зная языка, но разве не должно быть так: encoded = theString.Equals ("")? "": Html.Encode (theString);

some 29.12.2008 14:06

Да, вы оба правы, но это был лишь способ показать, насколько нечитаемым может стать такое решение.

Boris Callens 29.12.2008 15:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
5
12 373
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы должны найти другой способ заполнить пустую ячейку. HTML-кодирование пробела для самого себя вполне допустимо. Если вам нужно что-то еще, вы можете использовать экранирование URL-адресов или использовать собственный метод для генерации контента.

Ответ принят как подходящий

Кодирование пробела в HTML - это просто пробел. nbsp может выглядеть как пробел, но имеет другую семантику: «неразрывный» означает, что разрывы строк подавляются.

Решение: всякий раз, когда я обнаруживаю, что функциональные возможности отсутствуют или имеют неожиданное поведение (например, asp: Label и HyperLink не кодируют HTML), я пишу свой собственный класс утилит, который выполняет то, что я говорю;)

public class MyHtml
{
    public static string Encode(string s)
    {
        if (string.IsNullOrEmpty(s) || s.Trim()= = "")
            return "& nbsp;";
        return Html.Encode(s);
    }
}

Да, я планировал что-то подобное. Но прежде чем я начну реализовывать свое собственное (и представить возможные зависимости / ошибки изменения), я хотел убедиться, что лучшего решения нет.

Boris Callens 29.12.2008 15:11

Я думаю, у вас должен быть особый случай, например MyHtml.TdEncode, который делает это. Вы же не хотите добавлять nbsps везде. Кроме того, в чем разница между isNullOrEmpty (s) и s.Trim () == ""? Похоже, триммер лишний

Juan Mendes 28.09.2010 20:37

@JuanMendes, s.Trim()= = "" необходим, потому что string.IsNullOrEmpty(s) вернет false, если s содержит только пробелы. Есть более новый string.IsNullOrWhiteSpace(s), который справляется с этим условием; но он недоступен в .NET 2.0.

m-albert 28.02.2015 00:35

Может быть проще преобразовать " " в "\xA0", а затем безоговорочно Html.Encode получить результат:

s = (string.IsNullOrEmpty(s) || s.Trim()= = "") ? "\xA0" : s;
Html.Encode(s);

Шестнадцатеричный 00A0 определяет символ Unicode для неразрывного пробела, поэтому   является эквивалентом HTML-объекта  .

Если у вас есть какой-либо контроль над базой данных, вы можете преобразовать пустые поля или поля с одним пробелом в это значение "\xA0", что полностью устранит условие.

Спасибо за указатель на \xA0! Это пригодилось сегодня для чего-то похожего на это.

Cymen 03.05.2010 19:38

Другие вопросы по теме