ASP.NET MVC Razor лишние пробелы отображаются - PullRequest
5 голосов
/ 11 июля 2011

В Asp.net MVC Razor вставляет дополнительное пространство между текстовыми блоками. Я хочу сделать список таким образом: «1, 2, 3», но получить «1, 2, 3».

@for (int i = 1; i < 3; i++)
{
  <text>@i</text>
  if (i != 2)
  {
    <text>, </text>
  }
}

Есть ли способы удалить лишние пробелы?

Ответы [ 5 ]

7 голосов
/ 12 июля 2011

Вы видите дополнительный пробел между числом и запятой, потому что ваш шаблон бритвы включает в себя разрыв строки (который отображается как пробел в браузере) между числом и запятой:

@for (int i = 1; i < 3; i++)
{
  <text>@i</text> >LINE BREAK HERE<
  if (i != 2)
  {
    <text>, </text>
  }
}

Мне нравится ответ Дарина , и я бы предложил удалить ваш цикл и заменить его более декларативным выражением, но если вы не хотите заходить так далеко, попробуйте хотя бы удалить разрыв строки:

@for (int i = 1; i < 3; i++)
{
    <text>@i</text>if (i != 2){<text>, </text>}
}
6 голосов
/ 11 июля 2011

Я хочу отобразить список следующим образом: "1, 2, 3"

Быстро и грязно:

@string.Join(", ", Enumerable.Range(1, 3))

Очевидно, что пользовательский помощник кажется более подходящим для работы по форматированию чего-либо в представлении:

public static class HtmlExtensions
{
    public static IHtmlString FormatList(this HtmlHelper html, IEnumerable<int> list)
    {
        return MvcHtmlString.Create(string.Join(", ", list));
    }
}

, а затем просто:

@Html.FormatList(Model.MyList)
1 голос
/ 11 июля 2011

Вместо того, чтобы выписывать биты текста в разных местах каждый раз вокруг цикла, вы можете накапливать весь текст в StringBuilder, а затем вне цикла выполнить @stringBuilderObject.ToString().

0 голосов
/ 11 июля 2011

Проблема с источником, который генерируется.Когда вы смотрите на фактический источник, вы получаете:

  1
    , 
  2
    , 
  3

Как вы можете видеть, там много пустого пространства, в котором браузеры сворачиваются в один пробел (посмотрите на определение для нормального).

Использование StringBuilder или string.Join - это способ исправить это, если все, что вы делаете, выводите эти три числа.Но если вы пытаетесь сделать что-то еще, и это упрощенный пример, тогда см. В этом блоге , чтобы узнать, как это сделать, используя ol/ul и li s.

0 голосов
/ 11 июля 2011

Я мог бы предположить, что это не проблема Razor, а элемент отображается с некоторыми пометками.

  1. Откройте FireBug (или Chrome или что-то еще) и увидите, что это действительно проблема разметки.1004 *
  2. В ваш css-файл попробуйте добавить

text {margin: 0}

...