如何正确地将数值注入JavaScript?

时间:2014-07-31 09:59:21

标签: c# javascript asp.net

让我们说我有一个带有JavaScript的ASP.NET页面。通常,将服务器端方法/属性调用的结果注入JavaScript很容易,如以下常见示例所示:

var myUsernameControl = document.getElementById('<%= txtUsername.ClientID %>');

到目前为止一切正常。

现在让我们假设我的JavaScript表达式需要 numeric 参数而不是字符串参数,例如。

var someValue = someJavaScriptFunction(<%= someServerSideProperty %>, true);

var someNumber = <%= someServerSideProperty %>;

这样可行,但它会在Visual Studio中产生编译时警告(&#34;语法错误&#34;)。显然,内置JavaScript编译器将此视为

var someValue = someJavaScriptFunction(, true);
var someNumber = ;

并产生错误。

如何摆脱警告?我不想将<%= someServerSideProperty %>括在单引号或双引号中,因为这会改变JavaScript代码的语义。

我确定这是一个常见的问题,必须是一个漂亮的,规范的解决方案,我只是找不到它......

3 个答案:

答案 0 :(得分:3)

您可以使用双引号括起<%= ... %>代码,并在其前加+符号将其转换为数字值:

var someNumber = +"<%= someServerSideProperty %>";

由于

var a = +"10";
a === 10 // is true;

答案 1 :(得分:1)

我知道这是低效的,但它可以摆脱服务器端和客户端错误并起作用:

var value = parseInt("<%= someServerSideIntVariable %>");

或MVC剃刀:

var value = parseInt("@Model.MyIntProp");

答案 2 :(得分:0)

我只是在一些常见的javascript文件中定义了一个虚函数:

ServerValue = function (x) { return x; }

所以在aspx或cshtml中我可以写:

var someNumber = ServerValue(<%= someServerSideProperty %>);
var someString = ServerValue('<%= someServerSideProperty %>');
var someValue = someJavaScriptFunction(
    ServerValue(<%= someServerSideProperty %>),
    true);