在元素属性中嵌入(字符串)数据的正确方法是什么?

时间:2015-05-06 15:24:12

标签: javascript html asp.net-mvc

我想将数据从服务器发送到客户端,其中javascript代码可以访问数据。这基本上是一个字符串消息,我想在我的自定义属性中嵌入这样的内容:

 <div my-message="here is my custom data">

经过短暂的测试后,我认识到邮件本身可以包含特殊的字符,例如“嵌入后html会不正确。

(编码?)字符串数据的正确方法是什么? (服务器端是ASP MVC)

是否有任何javascript支持解码字符串?显然说base64可以做到,但听起来有点奇怪,而且我也不想在这里重新发明轮子。

3 个答案:

答案 0 :(得分:1)

对于服务器端:

剃刀

<div data-my-message="@("your string with \" goes here")">

或者如果你在模型中持有字符串

<div data-my-message="@Model.Message">

ASPX

<div data-my-message="<%: "your string with \" goes here" %>">

Razor的@()或ASPX的<%: %>会对其进行正确编码。

BTW如果您想直接在视图中嵌入字符串,可以使用"

转义\"

对于客户端:

您可以使用jQuery轻松阅读

$(selector).data("my-message")

或普通javascript

document.querySelector(selector).dataset.myMessage

另外,您应该在自己的自定义属性前加data-作为@Erik飞利浦在评论中所说的

答案 1 :(得分:0)

您可以使用encodeURIencodeURIComponent功能进行编码。并用于解码函数decodeURIdecodeURIComponents

你可以在这里查看它们:

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

答案 2 :(得分:-1)

如果你想发送任意数据(即数组,对象等),那么我使用以下内容:

  • 在标记
  • 上使用data-foo属性
  • json-encode the data
  • 在属性值周围使用单引号(JSON对字符串使用双引号)
  • 将json编码的字符串中的任何单引号替换为相应的thml实体(&amp;#8217)

类似的东西(我在PHP中做过,所以.net语法可能有点错误

<% Dim Serializer As New System.Web.Script.Serialization.JavaScriptSerializer %>
<div data-foo='<%=Serializer.Serialize(MyData).Replace("'", "&#8217") %>'>Some content</div>

要使用的数据位于变量MyData

具有以下优势:当你获得数据时,你会自动获得一个对象(至少,使用jQuery,但我会想象使用普通的js - 如果没有,那么它很容易重新创建对象)

<强>更新 关于双引号的评论,如果你的数据只是一个字符串,那么你应该替换双引号购买他们的html实体。或者确保你使用json-deode。如果它只是一个字符串,它不会被自动识别为json数据并被解码。 PHP(我已经使用了更多)将字符串中的双引号括起来\"。我有一个记忆,在vb.net中你需要将Serializer.Serialize(MyData).Replace("'", "&#8217")更改为Serializer.Serialize(MyData).Replace("\", "\\").Replace("'", "&#8217"),因为它处理报价的方式。如果数据是一个对象,那么当你把它拿出来并且一切正常时它会自动进行json解码。如果数据只是一个字符串,则不需要进行json编码 - 只需将至少一种引号类型(单引号或双引号)更改为html实体,并在属性周围使用该引号类型。 / p>

只要您获得正确的引用,它就可以处理数据中的html:有关简单的字符串示例,请参阅http://jsfiddle.net/ctueo7sr/,对于对象示例,请参阅http://jsfiddle.net/aLaLnhp2/1/