【问题标题】:Include a JS variable inside "<%: %>"在 "<%: %>" 中包含一个 JS 变量
【发布时间】:2020-06-03 13:31:07
【问题描述】:

我想在 '' 代码中包含变量“count”。

HTML 代码

<table id="myTable">
  <tr>
    <td>Row1 cell1</td>
    <td>Row1 cell2</td>
  </tr>
</table>
<br>

<button type="button" onclick="myFunction()">Try it</button>
<script>
    function myFunction() {
        var count;
        for (count = 0; count < <%=Givenome.Count()%>; count++)
        {
            var table = document.getElementById("myTable");
            var row = table.insertRow(0);
            var cell1 = row.insertCell(0);
            var cell2 = row.insertCell(1);
            cell1.innerHTML = "<%:Givenome[count]%>";
            cell2.innerHTML = "NEW CELL2";
        }
    }
</script>

这是我的 C# 代码,我在其中创建字符串数组。

public string[] Givenome { get; set; }

protected void Page_Load(object sender, EventArgs e)
{
    string[] answers = new string[10] { "Y", "Y", "N", "Y", "N", "Y", "N", "Y", "N", "Y" };

    Givenome = answers;
}

【问题讨论】:

  • 问题出在哪里?
  • 运行代码时是否出现任何错误?
  • &lt;%:Givenome[count]%&gt; count 是一个 javascript 变量,它不起作用。为什么不将数组嵌入为 javascript 数组,然后只使用纯 javascript?
  • Givenome 是一个C# 数组,它只存在于服务器上,而Javascript 运行在浏览器中。除了 HTTP 请求之外,这两个部分没有互连。
  • 你可以在 javascript var answers = &lt;%= Json.Serialize(Givenome) %&gt;; 中做,然后在 javascript 中循环。

标签: javascript c# html asp.net arrays


【解决方案1】:

您应该使用将您的 c# 数组转换为 javascript 可读的格式

var array = <%=new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(this.Givenome)%>;

然后你可以遍历 javascript 对象

for (var x = 0; x < array.length; x++)
{ 
     var table = document.getElementById("myTable");
     var row = table.insertRow(0);
     var cell1 = row.insertCell(0);
     var cell2 = row.insertCell(1);
     cell1.innerHTML = array[x];
     cell2.innerHTML = "NEW CELL2";
}

【讨论】:

    【解决方案2】:

    我认为你想要的是这样的:

    var table = document.getElementById('myTable');
    <%
    for (var i = 0; i < Givenome.Length; i++)
    {
        Response.Write("{");
        Response.Write("var row = table.insertRow(0);");
        Response.Write("var cell1 = row.insertCell(0);");
        Response.Write("var cell2 = row.insertCell(1);");
        Response.Write("cell1.innerHTML = '" + Givenome[i] + "';");
        Response.Write("cell2.innerHTML = 'NEW CELL2';");
        Response.Write("}");
    }
    %>
    

    【讨论】:

    • 如果 Givenome 有一百万件商品长怎么办?您真的想在 HTML 中将该块注入一百万次吗?此外,OP 将它包装在一个 JavaScript 函数中,大概是为了从不同的地方调用它。最后(也与 OP 的代码有关):JS 具有 var 的函数级别范围,所以你不应该像这样使用它们。我不会推荐这个答案。
    • 不,我不知道,但这是他问题的答案。恐怕没有其他简单直接的方法可以解决这个问题。范围界定与此无关,因为我们不关心这一点。
    • 范围确实无关紧要,只是指出来,因为它在您的重复代码中变得更加明显,就像在 OP 的块级 for 循环中一样。但是,我的主要观点是:不要使用代码来生成代码。这是一场可持续发展的噩梦,应该不惜一切代价避免。使用代码生成数据,如@swagat raorane 的回答。
    猜你喜欢
    • 2017-08-23
    • 2011-11-24
    • 2012-03-21
    • 1970-01-01
    • 2012-10-16
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 2021-08-19
    相关资源
    最近更新 更多