如何将指令表达为C#,因此它们可以是有条件的

时间:2017-07-27 00:06:06

标签: c# asp.net scriptmanager

此标记支持未在我工作的页面的移动版本中呈现的代码。

<%@ 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&#39;下面的回复我修改了我的页面以引用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将指令映射到显式代码来注册东西。任何人?

感谢Pedro尝试提供帮助,但该参考文献并没有帮助我们将这些控制指令表达为代码。

看起来我可能需要使用选项3,它会重定向到另一个不包含指令的页面。

1 个答案:

答案 0 :(得分:0)

你试过this SO answer吗?基本上,通过在C#代码中有条件地获取一个真/假值:

val pattern = """(?<!\\)\.""".r

pattern.split("""a.b.c\.d.e""")

// res1: Array[String] = Array(a, b, c\.d, e)

然后在Razor中仅使用代码中的那一位作为public bool IsDebugBuild { get { #if DEBUG return true; #else return false; #endif } } 条件,将其余部分保留在Razor中?

Another answer也是这样说的。

免责声明:我没有尝试过这个,而且我还没有玩过@if指令。