web-dev-qa-db-ja.com

C#およびASP.NET MVC:ビューで#ifディレクティブを使用する

私が使用している「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");

動いていない。

46
MegaMatt

モデルで:

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>
<% } %>
18
user151323

私 最近 簡単にテストできることを発見しました:

HttpContext.Current.IsDebuggingEnabled

ビューで、アプリの他の部分のシンボルをチェックする必要がなくなります。

106
UpTheCreek

より良い、より一般的なソリューションは、拡張メソッドを使用することです。したがって、すべてのビューがそれにアクセスできます。

public static bool IsReleaseBuild(this HtmlHelper helper)
{
#if DEBUG
    return false;
#else
    return true;
#endif
}

その後、任意のビューで次のように使用できます(カミソリ構文):

@if(Html.IsReleaseBuild())
...
61
Birdman
@if (HttpContext.Current.IsDebuggingEnabled)
{
    // Debug mode enabled. Your code here. Texts enclosed with <text> tag
}
9
d.popov

Viewmodelの代わりにViewBagを使用できます(ただし、viewmodelのようなアプローチの方が優れています)。

コントローラー:

controller code

見る :

@{
   bool hideYoutubeVideos = ViewBag.hideYoutubeVideos ?? false;     
}

使用法 :

@if (!hideYoutubeVideos)
{
     <span>hello youtube</span>
}

また、NIKITA_DEBUG変数がプロジェクトの[ビルド]タブに存在することを確認してください:

build tab

3
Nigrimmist

私にとって、以下のコードは非常にうまく機能しています。アプリケーションがデバッグ中の場合、ボタンが表示され、リリース中の場合は表示されません。

@if (this.Context.IsDebuggingEnabled)
{
    <button type="button" class="btn btn-warning">Fill file</button>
    <button type="button" class="btn btn-info">Export file</button>
}