2017-07-27 65 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" %> 

不出所料,大量不必要的腳本被加載。這不好。

如果有標記使這些註冊有條件,請參閱我的文檔。否則,我目前的想法是使用等價於標記的顯式代碼,並使其成爲有條件的。

我發現從this rather old resource ScriptManager但上述標記沒有明確引用js文件,所以我不知道如何映射兩者之間。任何人都可以建議嗎?

嘗試使用superjos的迴應下面我修改了頁面到位引用Page.Mobile,布爾屬性方便不已:

<%@ 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 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語句和大括號只是在瀏覽器中傳遞並呈現爲文本。

這讓我回到選項二,使用ScriptManager將指令映射到顯式代碼以註冊內容。任何接受者?


感謝佩德羅試圖幫助,但該參考並沒有幫助如何將這些控制指令表示爲代碼。

它看起來像我可能需要使用選項三,其中重定向到另一個頁面,不包含指令。

+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 if else else,例如[這裏](http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx/) – superjos

相關問題