Подтвердить что ты не робот

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>
  }
}

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

4b9b3361

Ответ 1

Вы можете использовать @Html.Raw. Код более читабельен, а на выходе нет лишних пробелов

@for (int i = 1; i < 3; i++)
{
  @Html.Raw(i)
  if (i != 2)
  {
    @Html.Raw(", ")
  }
}

Ответ 2

Так как это все еще проблема с тегом <text> в средстве обновления MVC 3 RTM + Tools, и это может быть реальная головная боль, с которой приходится иметь дело, альтернативой использованию eddiegroves для удаления пробелов из форматирования кода является то, чтобы избежать использования тега <text>.

Во-первых, это переписывание исходного кода, воспроизводящего проблему, и на самом деле печатает "1, 2, 3" :

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

Вот четыре альтернативы, которые печатают "1, 2, 3" вместо "1, 2, 3" , но сохраняют форматирование кода с помощью @something вместо <text>.

Решение №1: Использование @("")

@for (int i = 1; i <= 3; i++) {
    @i
    if (i < 3) {
        @(", ")
    }
}

Решение №2: Использование @var

@for (int i = 1; i <= 3; i++) {
    var s = i < 3 ? ", " : null;
    @i @s
}

Решение № 3: Использование @(выражение)

@for (int i = 1; i <= 3; i++) {
    @i @(i < 3 ? ", " : null)
}

Решение №4: Использование @helpers

@helper Item(int index) {
    @index
}

@helper Separator(int index, int count) {
    if (index < count) {
        @(", ")
    }
}

@for (int i = 1; i <= 3; i++) {
    @Item(i) @Separator(i, 3)
}

Последний пример явно завышен для примера, но может быть полезным шаблоном для более сложных элементов и разделителей.

Ответ 3

Я считаю, что в ASP.NET Razor RC есть проблема, которая, к сожалению, будет обрабатывать пробелы внутри контекста кода как буквальное пустое пространство для записи в ответ.

Приведенный выше пример является "фиксированным" путем удаления пробелов внутри кодовых блоков:

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

Или более аккуратный:

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

Следуя этой теме на сайте asp.net, есть дискуссия, которая имеет аналогичную проблему, и Andrew Nurse отвечает

Эта ошибка была зарегистрирована и будет для RTM.

Итак, если это та же проблема, мы надеемся, что этот список был исправлен.

Эта ошибка не сделала RTM

Ответ 4

Я бы, вероятно, написал для этого специальный помощник:

public static MvcHtmlString RenderNumbers(this HtmlHelper htmlHelper, int count)
{
    var text = string.Join(", ", Enumerable.Range(1, count).ToArray());
    return MvcHtmlString.Create(text);
}

а затем используйте его на мой взгляд:

@Html.RenderNumbers(3);

Ответ 5

Я хочу удалить все лишнее пространство в html, после некоторых исследований, мое решение, как следует.

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

оберните свой < текст > или < тег > в {},

Вы можете использовать это в вспомогательной функции, и она хорошо работает с функцией "Формат документа".

Убедитесь, что вы ввели код, если не оберните код с помощью @{}

для некоторых элементов (html, head, body), вам нужно {< тег > @{} @** @</Тег > }

чтобы предотвратить добавление новой строки после использования функции "Формат документа".

@{
   {<!DOCTYPE html>}
   {<html>@{
      {<head>@{
         {<link .../>}
      }@**@</head>}
      {<body>@{
         {<div>@{
            {<hr/>}
         }</div>}
      }@**@</body>}
   }@**@</html>}
}

@model object
@{
   // init
}@{

}@section MainSection {@{
   {<div>@{
      {<hr/>}
      {@Html.Partial("abc")}
      Html.RenderPartial("abc");
      if ("razor" == "good")
      {
        for (var i = 1; i <= 10; i++)
        {
           Write("(");
           {@i}
           Write(" ");
           {@<text>)</text>}
        }
      }
   }</div>}
}}

надеюсь, что это поможет.

Ответ 6

Любое из следующих действий должно работать, в зависимости от того, откуда взялись ваши значения:

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