通JSON字符串转换成客户方onclick事件从EVAL
问题描述:
在用户界面上,我有这样的:通JSON字符串转换成客户方onclick事件从EVAL
这是一个gridview里面一个div它内部的JSON字符串,并在它旁边是我想用作“复制到剪贴板”的图标。我已经有了CopyToClipBoard JavaScript方法,它工作正常。我遇到的麻烦是获取onclick方法中的json字符串。有些事情我已经试过:
onclick='copyToClipboard("<%# Eval("LogText")%>")'
onclick="copyToClipboard('<%# Eval("LogText")%>')"
而且所有的在此线程的建议:
Passing Eval from ASPX to Javascript function as Parameter
下面是完整的JSON字符串:
{
"DoorId": "11574544",
"DoorName": "out - door controller",
"CardNumber": "65529",
"FacilityCode": null,
"EventID": "570924d6-94b4-45b4-aa2d-9ab4075dc668",
"EventTimestamp": "2017-11-10 11:10:10.301",
"Name": "Norman Bates",
"AccessControlUserId": "15531926",
"OrganizationSys": 1012,
"AccessGranted": true,
"FirstName": "Norman",
"LastName": "Bates",
"Email": null,
"UserName": "normanbates",
"Password": "Password",
"Pin": null,
"CreateUserIfNotExists": false,
"CreateDoorIfNotExists": true,
"DoorStatusSys": 476,
"DoorLocationSys": 103979,
"AccessIntegrationSys": 100001
}
的问题是,所有的的引用似乎在搞乱事情。至少我想。例如,对于这样的:
onclick='copyToClipboard("<%# Eval("LogText")%>")'
我得到这个:
<img src="..." onclick="copyToClipboard("{"DoorId":"11574544","DoorName":"out - door controller","CardNumber":"65529","FacilityCode":null,"EventID":"570924d6-94b4-45b4-aa2d-9ab4075dc668","EventTimestamp":"2017-11-10 11:10:10.301","Name":"Norman Bates","AccessControlUserId":"15531926","OrganizationSys":1012,"AccessGranted":true,"FirstName":"Norman","LastName":"Bates","Email":null,"UserName":"normanbates","Password":"Password","Pin":null,"CreateUserIfNotExists":false,"CreateDoorIfNotExists":true,"DoorStatusSys":476,"DoorLocationSys":103979,"AccessIntegrationSys":100001}")">
当我点击该图标,我得到这个在控制台:
Uncaught SyntaxError: missing) after argument list
不知道怎么弄这个权利。
答
你有没有考虑将你的json存储在一个javascript变量中,然后在该onclick事件中写一个变量名?我已经取得了成功,我不得不在JavaScript之前序列化我的JSON。
Infact如果它是一个全局变量,则不必将其作为参数传递,但可以在页面上访问它。为什么不把你的json对象放在页面上作为全局变量来解析,然后你就可以从任何地方访问它。
例如
<asp:literal runat="server" ID="litJsonBlob" />
<img src="..." onclick="doSomething(jsonBlob)" />
代码背后
var serializer = new JavaScriptSerializer();
var serializedResult = serializer.Serialize(LogText);
litJsonBlob.Text = string.Format("<script>var jsonBlob = JSON.parse('{0}')</script>")", serializedResult)
alternively放下你的LogText straigt在变,我不知道你的设立正是:
<script> var jsonBlob = JSON.parse('<%# Eval("LogText")%>'); </script>
<img src="..." onclick="doSomething(jsonBlob)" />
通过我不知道在哪里的方式,JSON字符串来自但如果你把它放在字面控制里面,记住它很容易受到JavaScript注入攻击。
答
尝试"
Eval("LogText").Replace("\"",""")
替换您的JSON字符串引号