在服务器端,我指定按钮的点击事件
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字符串的任何想法吗?
答案 0 :(得分:3)
免责声明:我从未使用过asp.net,但字符串格式化功能不能如此不同,对吧? ;)
实际上,您不需要将其作为JSON字符串传递,将其作为JavaScript对象传递。尝试:
closeWindow.OnClickFunc = String.Format("CloseWindow({0});", "{codeA:'MALE',codeB:'SomeCodeB'}")
// no quotes ---^-^
如果您在JSON.parse
中使用了CloseWindow
,则不再需要它了。您可以直接从参数访问数据,例如: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 :(得分:1)
你需要在HTML中编码/转义引号,就像你在C#/ VB.NET中转义引号一样。
Server.HtmlEncode(String.Format("CloseWindow('{0}');", "{\"codeA\":\"MALE\",\"codeB\":\"SomeCodeB\"}"));
答案 2 :(得分:-1)
<img onclick="CloseWindow(eval('[{a:123, b:456}]')[0]);" />
将[]添加到字符串b4 eval