Javascript if 语句失败
Javascript if statement failing
我不完全确定为什么会这样。我想做的是将一个 C# 变量注入到 javascript if 语句中,但它没有按照我想要的方式执行,我不确定为什么。
我的 C# 命名空间中有一个列表
C# 列表:
List<string> unitNamesMainChart = new List<string>();
加载时此列表中没有任何内容,因此我想确保我访问的列表中没有任何内容,因为这会引发错误,因此我在 javascript 中有一个 if 语句。
Javascript
if(<%=unitNamesMainChart.Count %> >= 1 ){
a = <%= unitNamesMainChart[0] %>
}else{
a = ''
}
if(<%=unitNamesMainChart.Count %> >= 2)
{
b = <%= unitNamesMainChart[1] %>
}else{
ba = ''
}
//etc. There are numerous if statements.
所以理想情况下,我想检查列表中是否有任何内容,如果有,将其设置为 javascript 中的变量 a
,如果列表中没有任何内容,则设置 a=''
实际发生的事情是,当代码执行时,它在 a = <%= unitNameMainChart[0] %>
处崩溃,因为第 0 个位置没有任何内容。
知道为什么代码会这样执行吗?
问题是 javascript 可能将 .Count 函数呈现为字符串而不是整数。尝试在 .Count 语句周围使用以下内容以确保它是一个数字。
parseInt(<%=unitNamesMainChart.Count %>)
问题是您在 C# 中检查的内容与您在 JavaScript 中检查的内容不匹配。正如目前所写的那样,您的 if
语句在浏览器的 JavaScript 中被检查,但是 unitNamesMainChart[0]
会被 C# 评估,无论列表有多大。
我建议将所有逻辑移至 C# 并保留 JavaScript 没有任何 if/else
分支:
a = <%=((unitNamesMainChart.Count >= 1) ? unitNamesMainChart[0] : "''")%>;
或者,更简洁:
a = <%=unitNamesMainChart.FirstOrDefault() ?? "''"%>;
这一行:
if(<%=unitNamesMainChart.Count %> >= 1 ){
在javascript中转换为这一行:
if(0 >= 1){
其中 0 可以是任何数字,任何可能实际上是零。
这一行:
a = <%= unitNamesMainChart[0] %>
转换为:
a = --Something--
其中 --Something--
假定为数组的第一个值。
您错误地混合了 JavaScript 和 .net 代码。
您正在寻找这样的东西:
<%if(unitNamesMainChart.Count >= 1){%>
a = <%= unitNamesMainChart[0] %>;
<%}
else
{%>
a = -1; // or something
<%}%>
您将在页面上看到的 JavaScript 将是:
a = -- Something --
if\else 是 .net 代码,而输出 (a = -- Something --
) 是 JavaScript。
您混合了服务器端和客户端执行的代码,了解执行所有内容的位置和时间很重要。
在服务器端,我们只是生成文本,Javascript 结构没有意义,if
不被评估。这只是文字。这意味着 <%= unitNamesMainChart[0] %>
将在所有情况下执行,因为它不受服务器端测试的保护(当然,如果列表为空,它会给你一个例外)。
您可以像这样重写您的代码来避免这个问题:
<% if (unitNamesMainChart.Count > 0) {%>
a = '<%= unitNamesMainChart[0] %>'
<% } else {%>
a = ''
<% } %>
这次测试在服务器端执行,如果列表为空,您将不会尝试获取第一个元素。
我不完全确定为什么会这样。我想做的是将一个 C# 变量注入到 javascript if 语句中,但它没有按照我想要的方式执行,我不确定为什么。
我的 C# 命名空间中有一个列表
C# 列表:
List<string> unitNamesMainChart = new List<string>();
加载时此列表中没有任何内容,因此我想确保我访问的列表中没有任何内容,因为这会引发错误,因此我在 javascript 中有一个 if 语句。
Javascript
if(<%=unitNamesMainChart.Count %> >= 1 ){
a = <%= unitNamesMainChart[0] %>
}else{
a = ''
}
if(<%=unitNamesMainChart.Count %> >= 2)
{
b = <%= unitNamesMainChart[1] %>
}else{
ba = ''
}
//etc. There are numerous if statements.
所以理想情况下,我想检查列表中是否有任何内容,如果有,将其设置为 javascript 中的变量 a
,如果列表中没有任何内容,则设置 a=''
实际发生的事情是,当代码执行时,它在 a = <%= unitNameMainChart[0] %>
处崩溃,因为第 0 个位置没有任何内容。
知道为什么代码会这样执行吗?
问题是 javascript 可能将 .Count 函数呈现为字符串而不是整数。尝试在 .Count 语句周围使用以下内容以确保它是一个数字。
parseInt(<%=unitNamesMainChart.Count %>)
问题是您在 C# 中检查的内容与您在 JavaScript 中检查的内容不匹配。正如目前所写的那样,您的 if
语句在浏览器的 JavaScript 中被检查,但是 unitNamesMainChart[0]
会被 C# 评估,无论列表有多大。
我建议将所有逻辑移至 C# 并保留 JavaScript 没有任何 if/else
分支:
a = <%=((unitNamesMainChart.Count >= 1) ? unitNamesMainChart[0] : "''")%>;
或者,更简洁:
a = <%=unitNamesMainChart.FirstOrDefault() ?? "''"%>;
这一行:
if(<%=unitNamesMainChart.Count %> >= 1 ){
在javascript中转换为这一行:
if(0 >= 1){
其中 0 可以是任何数字,任何可能实际上是零。
这一行:
a = <%= unitNamesMainChart[0] %>
转换为:
a = --Something--
其中 --Something--
假定为数组的第一个值。
您错误地混合了 JavaScript 和 .net 代码。
您正在寻找这样的东西:
<%if(unitNamesMainChart.Count >= 1){%>
a = <%= unitNamesMainChart[0] %>;
<%}
else
{%>
a = -1; // or something
<%}%>
您将在页面上看到的 JavaScript 将是:
a = -- Something --
if\else 是 .net 代码,而输出 (a = -- Something --
) 是 JavaScript。
您混合了服务器端和客户端执行的代码,了解执行所有内容的位置和时间很重要。
在服务器端,我们只是生成文本,Javascript 结构没有意义,if
不被评估。这只是文字。这意味着 <%= unitNamesMainChart[0] %>
将在所有情况下执行,因为它不受服务器端测试的保护(当然,如果列表为空,它会给你一个例外)。
您可以像这样重写您的代码来避免这个问题:
<% if (unitNamesMainChart.Count > 0) {%>
a = '<%= unitNamesMainChart[0] %>'
<% } else {%>
a = ''
<% } %>
这次测试在服务器端执行,如果列表为空,您将不会尝试获取第一个元素。