Ответ 1
Вы можете использовать @Html.Raw. Код более читабельен, а на выходе нет лишних пробелов
@for (int i = 1; i < 3; i++)
{
@Html.Raw(i)
if (i != 2)
{
@Html.Raw(", ")
}
}
Razor добавляет дополнительное пространство между текстовыми блоками. Я хочу сделать список таким образом: "1, 2, 3", но получить "1, 2, 3".
@for (int i = 1; i < 3; i++)
{
<text>@i</text>
if (i != 2)
{
<text>, </text>
}
}
Есть ли способ удалить это дополнительное пространство?
Вы можете использовать @Html.Raw. Код более читабельен, а на выходе нет лишних пробелов
@for (int i = 1; i < 3; i++)
{
@Html.Raw(i)
if (i != 2)
{
@Html.Raw(", ")
}
}
Так как это все еще проблема с тегом <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)
}
Последний пример явно завышен для примера, но может быть полезным шаблоном для более сложных элементов и разделителей.
Я считаю, что в 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
Я бы, вероятно, написал для этого специальный помощник:
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);
Я хочу удалить все лишнее пространство в 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>}
}}
надеюсь, что это поможет.
Любое из следующих действий должно работать, в зависимости от того, откуда взялись ваши значения:
@string.Join(", ", myList)
@string.Join(", ", 1, 2, 3)
@string.Join(", ", Enumerable.Range(1, 3))