如何正确地将数值注入JavaScript
本文关键字:注入 JavaScript 正确地 | 更新日期: 2023-09-27 18:15:51
假设我有一个ASP。. NET页面使用JavaScript。通常,将服务器端方法/属性调用的结果注入到JavaScript中很容易,如下面的常见示例所示:
var myUsernameControl = document.getElementById('<%= txtUsername.ClientID %>');
目前一切正常。
现在让我们假设我有一个JavaScript表达式,它需要一个数字参数而不是字符串参数,例如var someValue = someJavaScriptFunction(<%= someServerSideProperty %>, true);
或
var someNumber = <%= someServerSideProperty %>;
这可以工作,但它会在Visual Studio中产生编译时警告("语法错误")。显然,内置的JavaScript编译器将其视为
var someValue = someJavaScriptFunction(, true);
var someNumber = ;
返回错误。
我如何摆脱警告?我不想把<%= someServerSideProperty %>
括在单引号或双引号中,因为这会改变JavaScript代码的语义。
我敢肯定这是一个很常见的问题,所以一定有一个漂亮的、规范的解决方案,我只是找不到它…
您可以将您的<%= ... %>
标记用双引号括起来,并在+
符号之前将其转换为数值:
var someNumber = +"<%= someServerSideProperty %>";
因为var a = +"10";
a === 10 // is true;
我知道这是低效的,但它摆脱了服务器端和客户端错误和工作:
var value = parseInt("<%= someServerSideIntVariable %>");
或MVC razor:
var value = parseInt("@Model.MyIntProp");
我只是在一些常见的javascript文件中定义了一个虚拟函数:
ServerValue = function (x) { return x; }
所以在aspx或cshtml中我可以写:
var someNumber = ServerValue(<%= someServerSideProperty %>);
var someString = ServerValue('<%= someServerSideProperty %>');
var someValue = someJavaScriptFunction(
ServerValue(<%= someServerSideProperty %>),
true);