我正在尝试将字符串值从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 file
function F1(value) {
alert(value);
}
答案 0 :(得分:4)
将字符串值传递给引号''
使用
TableCell.Attributes.Add("onclick", "F1('"+value +"')");
^ ^
否则将其视为变量。目前,您必须在浏览器控制台中收到错误。
答案 1 :(得分:4)
考虑HTML的外观。
第一版:
onclick="F1(abc)"
第二版:
onclick="F1(5)"
显然,第二个版本传递的值为5
。第一个版本传递abc
的值 - 无论是什么,都在您正在执行的Javascript环境中。
你可以引用字符串,确保你逃避引号等 - 我假设实际上你的价值是从某个地方动态获取的,你可能没有多少控制权内容。希望您使用的任何ASP.NET版本都可以使用这些内容,例如HttpUtility.JavaScriptStringEncode
。
例如,要在通话中获取字符串abc
,您希望该属性为:
onclick="F1('abc')"
但是如果要在通话中获取字符串I don't know
,则需要该属性为:
onclick="F1('I don\'t know')"
关键是要查看生成的HTML - 假装您是浏览器,并从其角度查看世界。一旦你弄清楚你想要生成什么HTML,编写代码通常会相对简单。
答案 2 :(得分:1)
尝试在C#字符串中构建单引号时添加单引号。在你的第一个场景中,Js正在接收:
F1(abc);
它读作变量abc。尝试添加单引号(并且最好使用string.format,BTW):
TableCell.Attributes.Add("onclick", string.Format("F1('{0}')", value));
答案 3 :(得分:1)
当您使用字符串时,它将生成JavaScript代码F1(abc)
。这会将abc
解释为变量名,而不是字符串文字。
在字符串周围添加撇号以使其成为字符串文字:
TableCell.Attributes.Add("onclick", "F1('" + value + "')");
如果字符串可以包含撇号或反斜杠,则需要转义它们:
TableCell.Attributes.Add("onclick", "F1('" + value.Replace("\\", "\\\\").Replace("'", "\\'") + "')");
答案 4 :(得分:1)
这将负责转义任何特殊字符(即引号等)
TableCell.Attributes.Add("onclick", "F1('"+HttpUtility.JavaScriptStringEncode(value)+"')");
答案 5 :(得分:0)
如果您在参数中传递字符串,则需要使用“或”字符来分隔它。您的变量名称将转换为调用中的(adb)。(“adb”)或('adb')是字符串值。
答案 6 :(得分:0)
那是因为它会打印
F1(abc)
因此它会查找名为abc
的变量。
你应该使用
TableCell.Attributes.Add("onclick", "F1(\""+value +"\")");
所以输出将是
F1("abc")