这是一个非常小的错误,我已经尝试了几个小时。
考虑背后的代码
using System;
public partial class Controls_DashboardGraph : InboundOutboundControl
{
public string GraphTitle
{
get
{
if (2>1) //To simply the logic, it will always meets this condition
{
return "The World";
}
else
{
return "All Cocoms";
}
}
}
protected void Page_Load(object sender, EventArgs e)
{
//Somelogic here
}
}
它有一个GraphTitle变量。
我正在尝试使用首页的值来执行在线字符串连接
<%@ control language="C#" autoeventwireup="true" codefile="DashboardGraph.ascx.cs" inherits="Controls_DashboardGraph" %>
<script type="text/javascript">
var title = <%= this.GraphTitle%>;
var isInBound = "true";
<%
if (3>2) //To minimize the code, simply the logic here
{
%>
path = `Services/ChartData.asmx/RetrieveChart?title=${title}&inbound=${isInBound}`;
<%
}
else
{
%>
isInBound = "false";
path = `Services/ChartData.asmx/RetrieveChart?title=${title}&inbound=${isInBound}`;
<%
}
%>
$.ajax({
type: "GET",
url: path,
success: function (data) {
//DoSomething
}
});
</script>
我正在尝试连接字符串以获得一个路径,以便在ajax中使用。然而,当我这样做的时候,我得到了
'未捕获的语法错误:意外的标识符'World'
行var title = <%= this.GraphTitle%>;
;
我尝试过的:
1:我以为是因为字符串中有空格。然而,当我将返回值更改为"0"时;TheWorld";,我有
未捕获引用错误:世界未定义
2:不同的蜜蜂蜇伤我尝试过:<%#%>,也没用。
我需要帮助的是:我知道这是一个非常琐碎的错误,但我已经被它困扰了一段时间。这里怎么了?为什么这种简单的字符串串联会抛出错误?
更改此项:
var title = <%= this.GraphTitle%>;
到此:
var title = "<%= Regex.Escape( this.GraphTitle ) %>";
- 注意两件事:
- 外部双引号
"
- 使用
Regex.Escape
作为穷人的替代品,将内存中的.NETString
字符转换为转义的JavaScript字符串,因为JavaScript和.NET正则表达式共享许多转义序列(尽管这种方法并不完美,但在必要时可以使用(。- 因此,如果
GraphTitle
包含双引号字符,那么它将被呈现为JS转义引号,因此您的JS<script>
元素不会被混淆
- 因此,如果
- 外部双引号