在 .aspx 文件中,JavaScript 中带有 <%=foo%> 的“Expected expression”是什么意思?

7
我有一个.aspx文件里的代码如下:

<script type="text/javascript" language="javascript">
function init()
{
     <%= x %>
}

它可以正常工作(x是一个将在运行时绑定到某些JavaScript的字符串),但编译时我收到了一个“预期表达式”的警告,这发生在<%=处。

我知道这不是世界上最好的代码,但有各种历史代码片段喜欢将小的JavaScript注入到页面中。完全无辜 :)

6个回答

14
警告是因为在JavaScript的<script>块内部有代码块,编译器试图智能识别HTML/控件和JavaScript之间的区别。
尽管有点丑陋,但您应该能够通过使用eval('<%= x %>')来消除警告。
您还可以查看我撰写的一篇关于使用ASP.NET创建动态JavaScript的文章:http://www.12titans.net/p/dynamic-javascript.aspx

2

如果你想完全合法,请使用文字字面量:

<asp:Literal ID="litX" runat="server"></asp:Literal>

在服务器端设置Text为整个<script type="text/javascript" language="javascript">...</script>块。


2

我以前做过这个,没有问题。 不过,我使用jQuery的$(document).ready()而不是init()。虽然我认为这不应该是一个问题。

x是什么数据类型? 如果它是一个字符串,请尝试用单引号括起来,如果它是一个数字,请使用parse函数转换成该数据类型。

<script type="text/javascript" language="javascript">
var s;
var n;
function init()
{
     s = '<%= x %>';
     n = parseInt('<%= x %>');
     eval('<%= x %>'); /* Raw Javascript */
}
</script>

另一个问题是属性的访问级别。ASP.NET网络表单无法直接从代码后台访问私有字段,必须保护或公开访问。

评估JavaScript函数


该字符串包含原始的JavaScript代码,我想要执行它。 - Joel Spolsky
然后你也可以使用 eval('string'); - Joseph Yaduvanshi

2
Visual Studio正在验证页面上的HTML标记。严格来说,'<'不是有效的XHTML。这个警告可能是由于验证的限制造成的,因为Visual Studio将javascript中的'<'字符解释为意思是“小于”!
显然,这些内联表达式不是有效的客户端代码。可以在“工具|选项|文本编辑器|HTML”中更改HTML验证选项。请注意,最好忽略这些警告,而不是针对HTML 4.01进行验证或完全关闭验证。

2
如果你只是在页面上添加JavaScript,你可以使用RegisterClientScriptBlock在服务器端构建脚本,然后让它输出到页面。这样,您就不必在页面中使用任何服务器端脚本和与之相关的开销。

0
我找到了我在这个问题上遇到的问题。
看起来我错误地注释掉了脚本上面的HTML。
 <%--  <div id="directionpanel" ></div>--%>

<script type="text/javascript">
    var LIST = <%= getJson()%>;
</script>

我在使用getJson()时收到了预期表达式警告。

正确注释HTML将修复此警告。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接