2017-07-27 3 views
1

このマークアップは、私が作業しているページのモバイル版ではレンダリングされないコードをサポートしています。C#でディレクティブを表現して条件付きにする方法

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> 
<%@ Register TagPrefix="ComponentArt" Namespace="ComponentArt.Web.UI" Assembly="ComponentArt.Web.UI" %> 
<%@ Register Src="Cart.ascx" TagName="Cart" TagPrefix="uc1" %> 
<%@ Register Src="Search.ascx" TagName="Search" TagPrefix="uc5" %> 
<%@ Register Src="Credits.ascx" TagName="Credits" TagPrefix="uc6" %> 
<%@ Register Src="Menu.ascx" TagName="Menu" TagPrefix="uc3" %> 
<%@ Register Src="taskspanel.ascx" TagName="TasksPanel" TagPrefix="uc6" %> 

驚くほど多くの不要なスクリプトが読み込まれます。これは悪いです。

これらの登録を条件付きにするためのマークアップがある場合は、ドキュメントを参照してください。さもなければ、私の現在の考えは、マークアップに相当する明示的なコードを使用し、それを条件付きにすることです。

私はScriptManagerをthis rather old resourceから発見しましたが、上記のマークアップはjsファイルを明示的に参照していないため、2つの方法をマップする方法はわかりません。誰も助言することはできますか?

<%@ Page Language="C#" AutoEventWireup="false" EnableViewStateMac="false" CodeBehind="Forms.aspx.cs" Inherits="ASSAOHS.forms" %> 
<%@ if (!Mobile) { %> 
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> 
<%@ Register TagPrefix="ComponentArt" Namespace="ComponentArt.Web.UI" Assembly="ComponentArt.Web.UI" %> 
<%@ Register Src="Cart.ascx" TagName="Cart" TagPrefix="uc1" %> 
<%@ Register Src="Search.ascx" TagName="Search" TagPrefix="uc5" %> 
<%@ Register Src="Credits.ascx" TagName="Credits" TagPrefix="uc6" %> 
<%@ Register Src="Menu.ascx" TagName="Menu" TagPrefix="uc3" %> 
<%@ Register Src="taskspanel.ascx" TagName="TasksPanel" TagPrefix="uc6" %> 
<%@ } %> 

が、これはこの

ようにそれを書く Parser Error Message: The server block is not well formed.

を生成します。私はすでに適所に便利Page.Mobile、Boolean型のプロパティを参照するために私のページを修正下回っsuperjosの応答を使用しようとすると、

<%@ Page Language="C#" AutoEventWireup="false" EnableViewStateMac="false" CodeBehind="Forms.aspx.cs" Inherits="ASSAOHS.forms" %> 
@if (!Mobile) { 
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> 
<%@ Register TagPrefix="ComponentArt" Namespace="ComponentArt.Web.UI" Assembly="ComponentArt.Web.UI" %> 
<%@ Register Src="Cart.ascx" TagName="Cart" TagPrefix="uc1" %> 
... 
} 

エラーは発生しませんが処理されません。 ifステートメントと中括弧は単にブラウザを通過してテキストとしてレンダリングされます。

これは、オプション2で私を戻して、ScriptManagerを使用して指示を明示的なコードにマップしてものを登録します。何かお手数ですか?しかし、その参照がコードとしてこれらの制御指令を表現する方法には役立ちません手助けしようとしているため、ペドロへ


感謝。

ディレクティブが含まれていない別のページにリダイレクトするオプション3を使用する必要があるようです。

+0

[this](https://stackoverflow.com/a/4405257/4014832)コードビハインドアプローチを試すことができます。 –

答えて

0

this SO answerで試したことがありますか?基本的にはC#コードで真/偽の値をとる条件付きでいくつかの値を有することにより:

public bool IsDebugBuild 
{ 
    get 
    { 
     #if DEBUG 
     return true; 
     #else 
     return false; 
     #endif 
    } 
} 

をして、カミソリで@if条件として、コードからのみ、そのビットを使用して、カミソリではまだすべての残りの部分を維持しますか?

Another answerも同様です。

免責事項:私はこれを試していないし、私は<%@ Register>ディレクティブでlooooong時間遊んでいない。

+0

私は既にあなたが提案するフォームの旗を持っており、私はあなたの答えを試しています。私のRazor構文の無知を補うことに感謝します。 –

+0

'Register'ディレクティブではうまく動作しないと思います。 Razorの構文の場合は、* Razorを見てみましょう。 [ここ](http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx/) – superjos

関連する問題