2017-07-27 67 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

相关问题