私が使用している「RELEASE」という条件付きコンパイルシンボルがあります。これは、Visual Studioのプロジェクトのプロパティで指定しました。 RELEASEシンボルが定義されているときに要素に特定のCSSを適用したいのですが、ビューからそれを行おうとしていましたが、機能していないようです。
私のビューコードは次のようになります(デモのために少し短くしました):
_<% #if (RELEASE) %>
<div class="releaseBanner">Banner text here</div>
<% #else %>
<div class="debugBanner">Banner text here</div>
<% #endif %>
_
このコードで、RELEASEシンボルセットを使用すると、「else」コードが実行され、debugBannerクラスでdivが取得されます。したがって、RELEASEが定義されているとは思わないようです。 .csファイル内の実際のC#コードがRELEASEを認識し、正しいコードを実行していることは注目に値します。問題を与えているのはビューだけです。
誰にもこれに関する洞察がありますか?任意の助けをいただければ幸いです。ありがとう。
説明:このビューはすでに部分ビューであることに言及しておく必要があります。必要なページに単純に表示します。これは、これらのバナーが特定のページにあり、他のページにはないためです。したがって、部分ビューとしてレンダリングする場合でも:
Html.RenderPartial("BannerView");
動いていない。
モデルで:
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>
<% } %>
私 最近 簡単にテストできることを発見しました:
HttpContext.Current.IsDebuggingEnabled
ビューで、アプリの他の部分のシンボルをチェックする必要がなくなります。
より良い、より一般的なソリューションは、拡張メソッドを使用することです。したがって、すべてのビューがそれにアクセスできます。
public static bool IsReleaseBuild(this HtmlHelper helper)
{
#if DEBUG
return false;
#else
return true;
#endif
}
その後、任意のビューで次のように使用できます(カミソリ構文):
@if(Html.IsReleaseBuild())
...
@if (HttpContext.Current.IsDebuggingEnabled)
{
// Debug mode enabled. Your code here. Texts enclosed with <text> tag
}
Viewmodelの代わりにViewBagを使用できます(ただし、viewmodelのようなアプローチの方が優れています)。
コントローラー:
見る :
@{
bool hideYoutubeVideos = ViewBag.hideYoutubeVideos ?? false;
}
使用法 :
@if (!hideYoutubeVideos)
{
<span>hello youtube</span>
}
また、NIKITA_DEBUG変数がプロジェクトの[ビルド]タブに存在することを確認してください:
私にとって、以下のコードは非常にうまく機能しています。アプリケーションがデバッグ中の場合、ボタンが表示され、リリース中の場合は表示されません。
@if (this.Context.IsDebuggingEnabled)
{
<button type="button" class="btn btn-warning">Fill file</button>
<button type="button" class="btn btn-info">Export file</button>
}