如何正确地将数值注入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代码的语义。

我敢肯定这是一个很常见的问题,所以一定有一个漂亮的、规范的解决方案,我只是找不到它…

如何正确地将数值注入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);