Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将字符串值从c#文件传递到js文件_Javascript_C#_Asp.net - Fatal编程技术网

Javascript 将字符串值从c#文件传递到js文件

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

我试图将字符串值从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(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在逃避价值时要小心——仅仅引用它可能是不够的。