繁体   English   中英

Visual Studio被javascript中的服务器代码混淆

[英]Visual Studio confused by server code inside javascript

我遇到了一个烦人的问题:以下代码在Visual Studio中给出了警告。

<script type="text/javascript">
var x = <%: ViewData["param"] %>;
</script>

警告是“期望的表达式”。 Visual Studio感到困惑,此后所有的javascript代码都发出大量警告。 当然,所有警告都可以,并且在运行时也能很好地工作-但是很容易在许多误报中错过真实的警告。

它在VS2008中的工作方式相同,而在VS2010中未修复。 有人知道是否有解决方法或补丁吗?

您需要将服务器端表达式包装在引号中。

<script type="text/javascript">
var x = "<%: ViewData["param"] %>";
</script>

这是我从微软那里得到的:

不幸的是,这是由于我们的编辑器的设计限制所致。 我们已经有多个用户提供相同的反馈,但是目前除了避免在服务器端生成客户端脚本之外,我们还没有一个好的解决方案。 我们将在计划下一个Visual Studio版本时考虑此问题。

您可以使用引号或行注释来欺骗IDE

原始代码:

    <script type="Text/javascript">
    <%If Page.IsPostback Then%>
    alert("my javascript code");
    <%End If%>
    </script>

解:

    <script type="Text/javascript">
    //<%If Page.IsPostback Then%>
    alert("my javascript code");
    //<%End If%>
    </script>

这不是标准行为,它只是随机发生的,在这种情况下,只需重命名文件然后构建将有所帮助(并且即使不构建也可能会解决),然后可以还原。

您还可以在“工具”->“选项”->“文本编辑器”->“ JScript”->“其他”下完全禁用Java脚本上的警告。

当然,在这种情况下,您将错过Java Script警告,但是至少您将能够专注于服务器端警告。

您采用的方法不是特别坚固。 显然,如果您想将Javascript代码移到单独的文件中以缩短页面加载时间,则无法使用...。

最好使用隐藏的表单字段将数据从服务器移至客户端脚本。 另外,您可以通过执行一系列字符串连接,然后使用ClientScriptManager.RegisterClientScriptBlock()方法以编程方式构建变量设置器JS代码,然后将其注入输出中。

我相信您从Visual Studio要求理解太难的想法。

Visual Studio如何知道传递的字符串中包含什么? ,它的参数,它的更多代码,它是什么??? .... VS如何知道它是什么,从而可以以这种方式使用它们?

因此,他们决定脚本标签上的所有内容都必须是JavaScript。

我的观点是,如果您能避免发生此错误,请在JavaScript的ASP.NET页面(而不是ASPX页面)内编写此JavaScript。

string cPlaceMeOnScript = "<script type=\"text/javascript\">var x =" + ViewData["param"] +";</script>"

并使用任何方法将此字符串放在脚本的开头。

我不敢相信有多少回应说“将JavaScript放在代码后边”。 这是一个非常糟糕的主意,并且通过将演示文稿与业务逻辑混合来混淆代码。 如原始海报所述,这仅是警告。 虽然很烦人,但不值得将您的代表行为与服务器端代码(也就是编写不良代码)混在一起。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM