![](/img/trans.png)
[英]Assign Javascript variable to correct text value of HTML table (The <td> tag)
[英]Assign a raw HTML tag to a JavaScript variable
我正在处理一个现有的 ASP.Net 应用程序,并遇到了一段我一直想知道的有趣的 JavaScript。
一些变量被声明为文字,它们不在字符串中。 例如,完成了这样的事情:
<script type="text/javascript">
var jsonData = <asp:Literal ID="MyJsonObject" runat="server" />;
......
</script>
在服务器端代码(C#)中,这些标签实际上是从JsonTextWriter
中改变的,类似于:
var stringBuilder = new StringBuilder();
var stringWriter = new StringWriter(stringBuilder);
using (var jsonWriter = new JsonTextWriter(stringWriter))
{
jsonWriter.Formatting = Formatting.Indented;
jsonWriter.WriteStartObject();
jsonWriter.WritePropertyName("someProperty");
jsonWriter.WriteValue("someValue");
jsonWriter.WriteEndObject();
}
MyJsonObject.Value = stringBuilder.ToString();
这反过来又导致 jsonData 变量能够在客户端代码中用作 Json 对象。
我注意到的是,如果我在标签周围加上单引号并将其更改为:
<script type="text/javascript">
var jsonData = '<asp:Literal ID="MyJsonObject" runat="server" />';
......
</script>
这不起作用,因为它不再是一个 Json 对象,而是一个实际的字符串。 但是,正如我所料,当它只是一个普通标签时,我会收到来自 Visual Studio 的几个语法错误。
这是普遍可以接受的东西还是我应该避免保留这样的东西? 是的,它有效,但在我看来不合适。
简而言之:是的,这看起来可以接受。 这似乎是<asp:Literal>
标记的预期用例之一。 由于您正在编写 Javascript 对象字面量,因此您甚至不需要单引号,因为这会改变代码的工作方式。
需要注意的是<asp:Literal>
不是 HTML 标记,因此不会按原样提供给用户。 <asp:Literal>
标记在页面发送给用户之前由 ASP.NET 进行预处理(因为您指定了runat="server"
); 因此,无论周围的内容如何,它都会被处理并完全替换为解析的字符串值。 因此,您呈现的页面将由此转换(在服务器端):
var jsonData = <asp:Literal ID="MyJsonObject" runat="server" />;
对此:
var jsonData = {
"someProperty" : "someValue"
};
这是将在服务器端构建的丰富数据传输到客户端 Javascript 的好方法,而无需将原始 Javascript 写出到页面。
如果你想要一个 JSON 格式的字符串,那么做你正在做的事情并在之后调用JSON.stringify(jsonData)
将是你最好的选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.