Javascript if语句失败

本文关键字:失败 语句 if Javascript | 更新日期: 2023-09-27 18:03:07

我不完全确定为什么会发生这种情况。我要做的是将c#变量注入javascript if语句,但它没有执行我想要的方式,我不知道为什么。

我有一个列表在我的c#命名空间

c# list:
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 if语句失败

这一行:

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 %>)