我在.aspx文件中有这样的代码:
<script type="text/javascript" language="javascript">
function init()
{
<%= x %>
}
它工作正常(x是一个在运行时绑定到某些JavaScript的字符串),但在编译时,我在&lt;%=
上得到一个“预期表达式”警告我知道这不是世界上最好的代码,但是有各种各样的历史代码可以在页面中注入少许JavaScript。一切都完全无辜:)
答案 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表单无法直接从代码隐藏中访问私有字段。访问必须受到保护或公开。
答案 5 :(得分:0)
我发现了我遇到的问题。
我似乎错误地在脚本上方注释了HTML。
<%-- <div id="directionpanel" ></div>--%>
<script type="text/javascript">
var LIST = <%= getJson()%>;
</script>
我在getJson()
上收到了预期的表达式警告正确评论HTML将修复警告。
- &GT;