消息关闭
    暂无新消息!

ASP.NET中嵌套使用JS里alert的困惑

问题作者 : 石头2017-05-05发布

asp.net 中我想让网页弹出一个 alert 框,显示我之前代码中的变量值。
一开始我这么写:

Response.Write("<script> alert(<%=targetAnswer[seed]%>)</script>");

页面上什么都不显示,也不弹窗。

后来上网查了些资料,写法如下:

Response.Write("<script> alert('"+targetAnswer[seed]+"')</script>");

请问为什么可以这么写呢?

我的理解是targetAnswer[seed]是我之前逻辑代码中的一个数组的值,所以我一开始想使用<%= %>来解决这个问题,可是失败了,但在第二种写法中,他是如何识别到targetAnswer[seed]是一个数组中的元素而不是一个字符串就叫做是"+targetAnswer[seed]+"呢?


4个回答

︿ 0

怎么会在邮件里推荐这个问题?这个问题有什么意义吗?sf没内容可推了吗??

Response.Write($"<script> alert('{targetAnswer[seed]}')</script>");

好吧, 你还能这么写

︿ 0

Response.Write("<script> alert('"+targetAnswer[seed]+"')</script>");

是三部分的相加啊
"<script> alert('"
targetAnswer[seed]
"')</script>"
当然可以了

你上面的写法相当于
有个html里

有这么一句话<script> alert(<%=targetAnswer[seed]%>)</script>

alert(<%=targetAnswer[seed]%>)能成功吗? 没有这个变量吧 在js执行的环境中
<%=targetAnswer[seed]%>也不是合法js变量名字

︿ 0

楼上哥们说的Response.Write()的内容是三部分相加是对的。
我要回答的是你的另一个问题,为什么 <%= %> 这一个做法在Response.Write()的时候无效。

首先我们先看看Response.Write()是什么?
Response简单来说就是服务器返回给浏览器的数据,
而Response.Write(string input)就是直接把input这个数据写到网页上面去了。
Response.Write("Hello world!")的话,你在页面上直接就能看到Hello world!。
同理,如果写入的是JS,用<script></script>标签包起来,这就直接执行JS了。

有了这个前提的话,就可以来看你的问题了。
ASP.NET 使用<%= %> 这个的时候,一般是用于前后台共享变量的。这个没问题吧?
一般来说就是我在后台声明了一个变量,前台直接用这个直接能访问。我们又知道,服务器把前台和后台“组合”好了之后输出到浏览器。
这样的话,数据到了浏览器的时候,还能保持<%= %>这个标识用来访问后台(服务器数据)变量吗?
抱歉,不能。因为输入到浏览器的时候,<%= %> 这里面的数据已经被替换掉了...

这样一来,你用Response.Write()输入<%= %>,数据是永远取不到的了。