2011-02-16 46 views
1

在服务器端,我分配一个按钮的点击事件传递JSON字符串javascript函数

closeWindow.OnClickFunc = String.Format("CloseWindow('{0}');", "{\"codeA\":\"MALE\",\"codeB\":\"SomeCodeB\"}"); 

当我检查呈现的HTML,它是完全畸形:

<img onclick="CloseWindow('{" src="close.jpg" id="closeLink"> 

要调试的问题,我得到了在JSON字符串

closeWindow.OnClickFunc = String.Format("CloseWindow('{0}');", "{codeA:MALE,codeB:SomeCodeB}"); 

现在HTML如预期摆脱双引号:

<img onclick="CloseWindow('{sectionCodeDB:NEWS,sectionCodeDBNew:NEWS,itemType:REMINDER}');" src="close.jpg" id="closeLink"> 

所以,有一些问题用双引号搞乱了HTML。

有关如何传递JSON字符串的任何想法?

+5

您实际上不需要将它作为JSON字符串传递,将它作为JavaScript对象传递。您是否尝试过:`String.Format(“CloseWindow({0});”,“{codeA:'MALE',codeB:'SomeCodeB'}”)`? (如果你使用`JSON。在`CloseWindow`中解析`,你不需要这个了) – 2011-02-16 20:25:45

+2

@Felix,你可能应该在回答中包装该评论:) – 2011-02-16 20:32:47

+0

@FrédéricHamidi:好的。完成;) – 2011-02-16 20:37:53

回答

1

你需要编码/逃避HTML引号,就像你逃脱在C#/ VB.NET引号。

Server.HtmlEncode(String.Format("CloseWindow('{0}');", "{\"codeA\":\"MALE\",\"codeB\":\"SomeCodeB\"}")); 
3

声明:我从来没有使用asp.net,但字符串格式化函数不能这么不同,对吧? ;)

实际上,您不需要将它作为JSON字符串传递,将它作为JavaScript对象传递。尝试:

closeWindow.OnClickFunc = String.Format("CloseWindow({0});", "{codeA:'MALE',codeB:'SomeCodeB'}") 
//          no quotes ---^-^ 

如果您在使用CloseWindowJSON.parse,你不需要这样了。您可以直接从参数访问数据,如:param.codeA

更新:

关于逃逸的问题。如果你有

"{\"codeA\":\"MALE\",\"codeB\":\"SomeCodeB\"}" 

然后这将只能在服务器端字符串中的引号转义。生成的代码会喜欢:

<img onclick="CloseWindow('{"codeA":"MALE","codeB":"SomeCodeB"}'" src="close.jpg" id="closeLink"> 

这显然是无效的。您需要

<img onclick="CloseWindow('{\"codeA\":\"MALE\",\"codeB\":\"SomeCodeB\"}'" src="close.jpg" id="closeLink"> 

现在,我认为你可以在字符串中的三个反斜杠实现这一目标:

String.Format("CloseWindow('{0}');", "{\\\"codeA\\\":\\\"MALE\\\",\\\"codeB\\\":\\\"SomeCodeB\\\"}"); 

有可能是虽然更好的方法。正如我所说,我不知道asp.net。

尽管如此,没有必要将数据作为JSON字符串传递。一个普通的JavaScript比较简单。

-1
<img onclick="CloseWindow(eval('[{a:123, b:456}]')[0]);" /> 

加[]符号串B4 EVAL

相关问题