Эквивалент предварительной обработки для представлений в RAZOR/MVC 3
Я ищу эквивалент
#if DEBUG
//view elements to show just for debug builds
#if
для просмотра в MVC3/Razor. Какой идиоматический метод для реализации этого типа установки?
4 ответа
Это слишком грязно, ИМО. Представления должны быть тупыми и ориентированы на рендеринг HTML, а не на принятие решений на основе сборки.
Установите свойства в вашей модели представления, если отладка настроена, и отобразите их в представлении.
Если свойства нулевые (например, не отладочные), ничто не будет обработано.
Вы можете использовать HttpContext.Current.IsDebuggingEnabled, он проверяет значение отладки в файле web.config.
Например:
@if(HttpContext.Current.IsDebuggingEnabled) {
//view elements to show just for debug builds
}
Другой вариант - использовать написать свое собственное расширение HttpHelper.
public static class HtmlHelperExtensions
{
public static bool IsDebug(this HtmlHelper helper)
{
#if DEBUG
return true;
#else
return false;
#endif
}
}
Тогда в вашем коде Razor вы можете использовать его как:
@if (Html.IsDebug())
{
//view elements to show just for debug builds
}
Директивы препроцессора (#if
) — это языковая функция C#, которую можно ввести с помощью блока кода бритвы (@{}
), а затем используйте явный переход с разделителями (<text></text>
) или явный переход строки (@:
), чтобы условно добавить html следующим образом:
@{
#if DEBUG
{
@:<div>Debug Mode</div>
}
#else
{
<text>
<div>
Release Mode
</div>
</text>
}
#endif
}
См. также : Директивы препроцессора в Razor.
Не думайте, что вы можете сделать это в Razor, поскольку он не компилируется так же, как код C#.
Поэтому я бы сказал, что лучший способ сделать это - сделать это в вашем контроллере и добавить его к значению в вашей модели.
Изменить: вот еще немного информации. Человек здесь предлагает метод расширения, который загружает соответствующий код, независимо от того, находится он в отладке или нет: представление asp.mvc вводит #IF DEBUG в конфигурации выпуска, так как вы не сказали нам, что хотели бы сделать, я не могу дать вам любые "кодовые" ответы.