“预期表达式”与<%= foo%>在.aspx文件中的JavaScript内部

时间:2009-12-14 22:16:44

标签: c# asp.net visual-studio-2008

我在.aspx文件中有这样的代码:

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

它工作正常(x是一个在运行时绑定到某些JavaScript的字符串),但在编译时,我在&lt;%=

上得到一个“预期表达式”警告

我知道这不是世界上最好的代码,但是有各种各样的历史代码可以在页面中注入少许JavaScript。一切都完全无辜:)

6 个答案:

答案 0 :(得分:14)

警告正在发生,因为代码块位于JavaScript <script>块内;编译器试图聪明地识别HTML /控件和JavaScript之间的区别。

虽然它有点难看,但您应该可以使用eval('<%= x %>')消除警告

您可能还会看一篇我使用ASP.NET创建动态JavaScript的文章:http://www.12titans.net/p/dynamic-javascript.aspx

答案 1 :(得分:2)

如果您想完全合法,请使用文字:

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

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

答案 2 :(得分:2)

页面上的Visual Studio为validating the HTML markup。严格来说,'&lt;'是无效的XHTML。此警告可能是由于Visual Studio正在解释'&lt;'而导致的验证限制。 javascript中的字符意思是'小于'!

显然,这些内联表达式不是有效的客户端代码。可以在“工具”|“选项”|“文本编辑器”|“HTML”中更改HTML验证选项。请注意,简单地忽略这些警告而不是验证HTML 4.01或完全关闭验证可能更好。

答案 3 :(得分:2)

如果您所做的只是向页面添加javascript,则可以使用RegisterClientScriptBlock构建脚本服务器端,然后将其输出到页面。

通过这种方式,您不必在页面中拥有任何服务器端脚本以及随之而来的所有开销。

答案 4 :(得分: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 Web表单无法直接从代码隐藏中访问私有字段。访问必须受到保护或公开。

Eval Javascript Function

答案 5 :(得分:0)

我发现了我遇到的问题。

我似乎错误地在脚本上方注释了HTML。

 <%--  <div id="directionpanel" ></div>--%>

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

我在getJson()

上收到了预期的表达式警告

正确评论HTML将修复警告。

  - &GT;