在 "<%: %>" 中包含一个 JS 变量

Posted

技术标签:

【中文标题】在 "<%: %>" 中包含一个 JS 变量【英文标题】:Include a JS variable inside "<%: %>" 【发布时间】: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 中循环。 【参考方案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 的回答。

以上是关于在 "<%: %>" 中包含一个 JS 变量的主要内容,如果未能解决你的问题,请参考以下文章

在 "<%: %>" 中包含一个 JS 变量

在这种情况下使用 <a href="http://name.com" rel="noindex, nofollow">name</a>

为啥 <input type="number" maxlength="3"> 在 Safari 中不起作用?

为啥 <input type="number" maxlength="3"> 在 Safari 中不起作用?

用bootstrap写了一个<div class="row">...</div>,如何让这个div在整个浏览器窗口居中?

XML中的 "<" ">" "&" 怎么转义