Razor для создания однострочного текста - PullRequest
4 голосов
/ 17 мая 2011

Я хочу написать Razor View Helper для создания однострочного контента:

@helper Format(obj) {
   <text>
       @obj.Title
       @obj.FormatInnerData() (obj.User != null)
       {
          @obj.User.Name
       }
   <text>
}

Но, конечно, я получаю

Title
Inner Data
User Name

В настоящее время я должен сделать

<text>@obj.Title @obj.FormatInnerData() @(obj.User != null ? obj.User.Name : "")</text>

для вывода текста в виде одной строки без разрывов строк, но это может стать довольно длинным / нечитаемым для многих свойств.

Другими словами, как мне удобнее использовать Razor для создания текстового контента, а не разметки контента?

UPD: в идеале это было бы что-то вроде

   <content>@obj.Title</content>
   <content>@obj.Format()
 @obj.User.Name</content>

т.е. только части между тегами контента попадают в выходной поток. Конечно, возможно, более простой синтаксис, такой как @: вместо .

Примером использования может быть генерация строкового содержимого JavaScript с разметкой внутри или генерация текстовых файлов с подробностями лицензии в формате «Ключ: Имя (подробности)» в каждой строке с пробелами для группировки.

Ответы [ 4 ]

1 голос
/ 04 декабря 2014

Вы можете создать вспомогательный метод, подобный этому

public class MyHelper
{
    public static string JoinedString(string delimiter, params object[] parameters)
    {
        return string.Join(delimiter, parameters);
    }
}

И затем вызвать его в представлении Razor как

MyHelper.JoinedString("", 
         "<text>", 
         @obj.Title, 
         obj.User == null ? "" : obj.User.Name
         "</text>")

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

1 голос
/ 17 мая 2011

Так что, если я вас правильно понимаю, вы бы хотели указать ваши представления несколькими строками, в то время как конечный результат будет все в одной строке?

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

0 голосов
/ 23 мая 2011

Вот частично полезное решение:

@helper Format(obj) {
   <text>@(obj.Title
     ) @(obj.FormatInnerData()
     ) @(obj.User != null ? obj.User.Name : "")<text>
}

Т.е. мы переносим код на следующую строку, а не содержимое, поэтому новые строки внутри @ () не записываются в вывод.

0 голосов
/ 17 мая 2011

Вы пробовали

@helper Format(obj) {
   <text>
       @( obj.Title + 
          obj.FormatInnerData() + 
         obj.User != null ? obj.User.Name : ""
        )
   <text>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...