Javascript if语句失败
本文关键字:失败 语句 if Javascript | 更新日期: 2023-09-27 18:03:07
我不完全确定为什么会发生这种情况。我要做的是将c#变量注入javascript if语句,但它没有执行我想要的方式,我不知道为什么。
我有一个列表在我的c#命名空间
c# list:List<string> unitNamesMainChart = new List<string>();
加载时,这个列表中没有任何内容,所以我想确保我没有访问列表中没有任何内容,因为这会抛出错误,所以我在javascript中有一个if语句。
Javascriptif(<%=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点没有任何东西。
你知道为什么代码会这样执行吗?
这一行:
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。
问题是,在c#中检查的内容与在JavaScript中检查的内容之间存在不匹配。正如目前所写的,你的if
语句是在浏览器上的JavaScript中检查的,但unitNamesMainChart[0]
被c#评估,无论列表有多大。
我建议把所有的逻辑都移到c#中,并留下没有任何if/else
分支的JavaScript:
a = <%=((unitNamesMainChart.Count >= 1) ? unitNamesMainChart[0] : "''")%>;
或者更简洁地说:
a = <%=unitNamesMainChart.FirstOrDefault() ?? "''"%>;
您正在混合执行服务器端和客户端代码,了解所有代码在何时何地执行非常重要。
在服务器端,我们只是生成文本,Javascript结构没有意义,if
不被计算。只是短信而已。这意味着<%= unitNamesMainChart[0] %>
将在所有情况下执行,因为它不受服务器端测试的保护(当然,如果列表为空,它会给您一个异常)。
你可以这样重写你的代码来避免这个问题:
<% if (unitNamesMainChart.Count > 0) {%>
a = '<%= unitNamesMainChart[0] %>'
<% } else {%>
a = ''
<% } %>
这一次,测试是在服务器端执行的,如果列表为空,您将不会尝试获取第一个元素。
问题是javascript可能将。count函数呈现为字符串而不是整数。尝试使用下面的。count语句来确保它转换为一个数字。
parseInt(<%=unitNamesMainChart.Count %>)