С# и ASP.NET MVC: использование директивы #if в представлении
У меня есть условный символ компиляции, который я использую под названием "RELEASE", который я указал в своих свойствах проекта в Visual Studio. Я хочу, чтобы какой-то определенный CSS применялся к элементам, когда был определен символ RELEASE, и я пытался сделать это из представления, но он, похоже, не работает.
Мой код выглядит так (сокращенно для демонстрационных целей):
<% #if (RELEASE) %>
<div class="releaseBanner">Banner text here</div>
<% #else %>
<div class="debugBanner">Banner text here</div>
<% #endif %>
С помощью этого кода и с набором символов RELEASE выполняется код 'else', и я получаю div с классом debugBanner. Таким образом, похоже, что RELEASE не определено. Стоит отметить, что мой фактический код С# в .cs файлах распознает RELEASE и запускает правильный код. Это только мнение, которое дает мне проблему.
Кто-нибудь может понять это? Любая помощь будет оценена по достоинству. Спасибо.
Разъяснение: Я должен был упомянуть, что это представление уже является частичным представлением, и я просто сделаю его на страницах, где мне это нужно. Это потому, что эти баннеры будут на определенных страницах, а не на других. Поэтому даже при рендеринге его как частичном представлении с помощью:
Html.RenderPartial("BannerView");
он не работает.
Ответы
Ответ 1
В вашей модели:
bool isRelease = false;
<% #if (RELEASE) %>
isRelease = true;
<% #endif %>
На ваш взгляд:
<% if (Model.isRelease) { %>
<div class="releaseBanner">Banner text here</div>
<% } else { %>
<div class="debugBanner">Banner text here</div>
<% } %>
Ответ 2
I недавно обнаружил, что вы можете просто проверить:
HttpContext.Current.IsDebuggingEnabled
в представлениях, которые сохраняют ваши проверки символов в других частях вашего приложения.
Ответ 3
Лучшим, более общим решением является использование метода расширения, поэтому все представления имеют к нему доступ:
public static bool IsReleaseBuild(this HtmlHelper helper)
{
#if DEBUG
return false;
#else
return true;
#endif
}
Затем вы можете использовать его, как показано ниже, в любом представлении (синтаксис бритвы):
@if(Html.IsReleaseBuild())
...
Ответ 4
@if (HttpContext.Current.IsDebuggingEnabled)
{
// Debug mode enabled. Your code here. Texts enclosed with <text> tag
}
Ответ 5
Вы можете использовать ViewBag вместо viewmodel (но лучше использовать режим viewmodel):
Контроллер:
![controller code]()
Вид:
@{
bool hideYoutubeVideos = ViewBag.hideYoutubeVideos ?? false;
}
Использование:
@if (!hideYoutubeVideos)
{
<span>hello youtube</span>
}
Кроме того, убедитесь, что переменная NIKITA_DEBUG существует во вкладке сборки вашего проекта:
![build tab]()
Ответ 6
Ниже приведен синтаксис Razor для условных директив компилятора. Он загружает версию jQuery разработчика, когда переменная DEBUG задана в профиле VS или web.config. В противном случае загружается версия min.
@{#if (DEBUG)
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/jquery-ui.js"></script>
#else
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.12/jquery-ui.min.js"></script>
#endif
}