Javascript 将字符串值从c#文件传递到js文件
我试图将字符串值从c#文件传递到js文件 若我试图传递一个int值,那个么我可以传递它,但我不能传递字符串值Javascript 将字符串值从c#文件传递到js文件,javascript,c#,asp.net,Javascript,C#,Asp.net,我试图将字符串值从c#文件传递到js文件 若我试图传递一个int值,那个么我可以传递它,但我不能传递字符串值 string value = "abc"; int a=5; TableCell.Attributes.Add("onclick", "F1("+value +")"); //NOTHING HAPPENS TableCell.Attributes.Add("onclick", "F1("+a +")"); //Works Perfectly js文件 function F1(v
string value = "abc";
int a=5;
TableCell.Attributes.Add("onclick", "F1("+value +")"); //NOTHING HAPPENS
TableCell.Attributes.Add("onclick", "F1("+a +")"); //Works Perfectly
js文件
function F1(value) {
alert(value);
}
在引号中传递字符串值
'
使用
否则将其视为变量。当前,浏览器控制台中肯定出现错误。在C#字符串中构建值时,请尝试在值周围添加单引号。在第一个场景中,Js接收到:
F1(abc);
它读作变量abc。尝试添加单引号(顺便说一句,最好使用string.format):
考虑一下您的HTML将是什么样子 第一版:
onclick="F1(abc)"
第二版:
onclick="F1(5)"
显然,第二个版本正在传递值5
。第一个版本传递的是abc
——不管是什么,都是在您正在执行的Javascript上下文中传递的
您可以引用字符串,确保转义引号等-我假设在现实中,您的值是从某处动态获取的,并且您可能无法对内容进行太多控制。希望在您使用的ASP.NET版本中有一些东西可以让您做到这一点,例如
例如,要在通话中获取字符串abc
,您希望属性为:
onclick="F1('abc')"
onclick="F1('I don\'t know')"
但是如果要在调用中获取字符串我不知道
,您希望属性为:
onclick="F1('abc')"
onclick="F1('I don\'t know')"
关键是查看生成的HTML——假设你是浏览器,从它的角度看世界。一旦计算出要生成的HTML,编写代码通常相对简单。当使用字符串时,它将生成JavaScript代码
F1(abc)
。这将把abc
解释为变量名,而不是字符串文字
在字符串周围添加撇号,使其成为字符串文字:
TableCell.Attributes.Add("onclick", "F1('" + value + "')");
如果字符串可以包含撇号或反斜杠,则需要对其进行转义:
TableCell.Attributes.Add("onclick", "F1('" + value.Replace("\\", "\\\\").Replace("'", "\\'") + "')");
如果要通过参数传递字符串,则需要使用“或”字符对其进行分隔。您的变量名将在调用中转换为(adb)。(“adb”)或('adb')将是字符串值。这是因为它将打印
string value = "abc";
int a=5;
TableCell.Attributes.Add("onclick", "F1("+value +")"); //NOTHING HAPPENS
TableCell.Attributes.Add("onclick", "F1("+a +")"); //Works Perfectly
F1(abc)
因此,它将查找一个名为abc
的变量
你应该使用
TableCell.Attributes.Add("onclick", "F1(\""+value +"\")");
因此,输出将是
F1("abc")
这将负责转义任何特殊字符(即引号等)
在这里使用
string.Format
没有什么特别的好处(是什么让你说它“可能是最好的”?)-但对值中的任何引号等进行转义是很重要的。不,不要只将值放在单引号中。当前,如果值本身包含单引号,或例如反斜杠,则此操作将中断。该值需要转义和引用。@JonSkeet,完全同意,但根据包括我在内的其他答案,您不需要o在逃避价值时要小心——仅仅引用它可能是不够的。