将JSON字符串传递给EVAL的clientside onclick事件

时间:2017-11-10 22:25:12

标签: javascript c# asp.net

在用户界面上,我有这个:

enter image description here

它是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)

不确定如何做到这一点。

2 个答案:

答案 0 :(得分:0)

您是否考虑过将json存储在javascript变量中,然后在该onclick事件中写入变量名?我已经取得了成功,我不得不javascript序列化我的json。

事实上,如果它是一个全局变量,您不必将其作为参数传递,但可以在页面上访问它。为什么不把你的json对象作为全局变量放在页面加载上解析,然后就可以从任何地方访问了。

e.g。

> as.POSIXlt.POSIXct("this")
[1] NA
Warning message:
In as.POSIXlt.POSIXct("this") : NAs introduced by coercion
> 

背后的代码

<asp:literal runat="server" ID="litJsonBlob" />  
<img src="..." onclick="doSomething(jsonBlob)" />

在变量中交替删除你的LogText straigt我不确切知道你的设置是什么:

var serializer = new JavaScriptSerializer();
var serializedResult = serializer.Serialize(LogText);

litJsonBlob.Text = string.Format("<script>var jsonBlob = JSON.parse('{0}')</script>")", serializedResult)

顺便说一下,我不知道json字符串来自哪里,但如果你把它放在文字控件中,请记住它很容易受到javascript注入攻击。

答案 1 :(得分:0)

尝试用“

替换json字符串中的引号
Eval("LogText").Replace("\"","&quot;")