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 = ''
<% } %>

这次测试在服务器端执行,如果列表为空,您将不会尝试获取第一个元素。