質問

ASPXページでプリプロセッサディレクティブを使用しようとしていますが、ページで認識されません。これは私にできないことですか?

背景:DEBUGモードのjQueryのフルバージョン(デバッグ用=)を含めようとしています)、およびリリース用に縮小バージョンを含めています。私はこれを試してみましたが、ASPX <!> lt;%構文にそれほど詳しくありません。私はこの構文が何をするかを根本的に誤解しているだけですか?

<% #if DEBUG %>
<script type="text/javascript" src="resources/jquery-1.3.2.js" />
<% #else %>
<script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
<% #endif %>
役に立ちましたか?

解決

興味深い違い-aspxページで#if DEBUGを使用するとweb.configのタグからプルされますが、コードビハインドで使用すると、プロジェクトファイルのビルド構成から定数からDEBUGがプルされます。そのため、実際には2つの異なる設定にアクセスしています。

したがって、私が知る限り、これは実際には不可能です。

他のヒント

より良い方法は、サーバー側のコードを使用してスクリプトを含めることです。

のようなものを使用します
protected void Page_Load(object sender, EventArgs e)
{
#if DEBUG    
    ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.js");
    #else
    ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.min.js");
    #endif
}

私にとって最もエレガントな解決策は、プリプロセッサディレクティブを使用してコードビハインドでフィールドを定義し、aspxページからその値をチェックすることです。

コードビハインド:

public partial class WebClient : System.Web.UI.Page
{        
#if DEBUG 
    public bool DebugMode = true;
#else
    public bool DebugMode = false;
#endif
}

Aspxページ:

<%if(this.DebugMode){%>
    <script type="text/javascript" src="resources/jquery-1.3.2.js" />
<%}%>
<%else{%>
    <script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
<%}%>

あなたのコードを試してみましたが、うまくいきました。 webサイトとして実行しているweb.configのsystem.web / compilationセクションからDEBUGを有効または無効にしました(Webアプリケーションとしてテストしませんでした。異なる場合があります...)。

そのコードの機能を確認するには、意図的な構文エラーをページに挿入し、デバッグモードを有効にして実行してみてください。コンパイラは、エラーページにリンクを生成し、ソースを表示できるようにします。

ヒント:プリプロセッサディレクティブが出力に挿入されます

Line 218:     #if DEBUG 
Line 219:              
Line 220:              #line default
Line 221:              #line hidden
Line 222:              @__w.Write("\r\n<script type=\"text/javascript\" src=\"resources/jquery-1.3.2.js\" />\r\n");
Line 223:              
Line 224:              #line 14 "F:\Test\test.aspx"
Line 225:     #else 
Line 226:              
Line 227:              #line default
Line 228:              #line hidden
Line 229:              @__w.Write("\r\n<script type=\"text/javascript\" src=\"resources/jquery-1.3.2.min.js\" />\r\n");
Line 230:              
Line 231:              #line 16 "F:\Test\test.aspx"
Line 232:     #endif

もちろん、あなたがやりたいことをする他の(より良い)方法があります...

私は何年も成功することなく、この多くの方法を達成しようとしました。遊んだ後 asp.net mvcで最近このアイデアを得ました。すべてを維持する別の可能性があります 無効なMIMEタイプを使用するaspxページ。 asp.net MVCでは、テンプレートは無効なMIMEでロードされます  型、ブラウザがそれらを解析しないように。ここでも同じパターンに従いました。ウォラ! 成功...デバッグ制約に簡単にアクセスできる静的関数が1つ必要です。

<script src='<%= Page.ResolveUrl("~/Scripts/jquery-1.5.2.min.js") %>' 
    **type='<%=if(Ops.IsRelease(),"text/javascript","HideMin")%>'**></script> 

Ops.IsRelease()は、デバッグ定数を返すパブリック静的関数です

    Public Shared Function IsRelease() As Boolean
        Dim [release] = False
#If Not debug Then
        [release]=True
#End If
        Return [release]
    End Function

同じ問題がありました。asp.mvcアプリケーションとwebformアプリケーションの両方で解決しようとしました。 #ifデバッグは常にtrueを返し、web.configコンパイル設定を考慮しません。この投稿に掲載されているSyamのアドバイスと同様の方法で解決しましたが、静的関数の代わりに、ここで説明するようにastatcic変数を使用します。 http://www.psworld.pl/Programming/DebugDirective

ここに私の解決策があります:

protected void Page_Load(object sender, EventArgs e)
{
    if (System.Diagnostics.Debugger.IsAttached)
    {
        ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.js");
    }
    else
    {
        ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.min.js");
    }
}

残念ながら、aspxでプリプロセッサディレクティブを使用できるとは思わない。

より簡単な方法は、jQuery URLでフィードするコードビハインドにプロパティを設定し、プリプロセッサディレクティブを設定して宣言することです。または、URLをコードの先頭に保持したい場合は、リテラルコントロールを使用し、プロセッサディレクティブに基づいてコードビハインドで表示を切り替えることができます。

例:

code-infront:

<asp:literal id="litJQuery" EnableViewState="false" runat="Server">
<script type="text/javascript" src="resources/jquery-1.3.2.js" />
</asp:literal>
<asp:literal id="litJQueryDebug" EnableViewState="false" Visible="false" runat="Server">
<script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
</asp:literal>

コードビハインド、Page_Loadメソッド:

#if DEBUG
litJQueryDebug.Visible=true;
litJQuery.Visible=false;
#endif
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top