У меня есть некоторые данные, и иногда эти данные пустые. Вместо того, чтобы сделать кучу сумасшедшей логики в моем представлении, я предпочел бы использовать вспомогательный метод, который будет отображать данные, если он существует, и отобразить некоторый HTML, который просто говорит «N/A», когда строка пуста/null.MVC Razor: Вспомогательный метод для рендеринга альтернативного содержимого при пустом
Идеальный синтаксис: @Helpers.RenderThisOrThat(Model.CustomerPhone)
Если Model.CustomerPhone
(строка) пусто это будет сделать этот альтернативный HTML вместо: <span class='muted'>N/A</span>
Вот что мы имеем до сих пор:
@helper RenderThisOrThat(string stringToRender, string methodToGetAlternateText = null)
{
@RenderThisOrThat(MvcHtmlString.Create(stringToRender), methodToGetAlternateText)
}
@helper RenderThisOrThat(MvcHtmlString stringToRender, string methodToGetAlternateText = null)
{
if (string.IsNullOrWhiteSpace(stringToRender.ToHtmlString()))
{
if (!string.IsNullOrWhiteSpace(methodToGetAlternateText)) {
@methodToGetAlternateText
}
<span class='muted'>N/A</span>
}
@stringToRender
}
это работает просто отлично, пока мы не хотим передать что-либо, кроме строки, в любой параметр. Например, если у нас есть адрес электронной почты, мы хотим, чтобы он был ссылкой на это письмо, а не только на строку письма.
@Helpers.RenderThisOrThat(@<a href="mailto:@Html.DisplayFor(m => m.CustomerEmail)">@Html.DisplayFor(m => m.CustomerEmail)</a>)
Это дает нам сообщение об ошибке: «Не удается преобразовать лямбда-выражения к типу„строка“, потому что это не тип делегата»
Мы в недоумении, как сделать эту работу .. любая помощь здесь?
Можете ли вы написать такой код? Помимо вашего вспомогательного метода, я не думаю, что Razor может интерпретировать это. –
Вы ссылаетесь на 'System.Linq;'? – Kami
@ Ками, для чего LINQ? –