我正在尝试将数据库中的项目列表呈现为JSON块,以便我可以通过JavaScript在客户端使用它。我认为最好的方法是使用Repeater或ListView来呈现我的项目,但是我得到了“服务器标签格式不正确”的错误。
这是我的代码
<asp:ListView runat="server" ID="rptAddresses" ItemPlaceholderID="plcItems">
<LayoutTemplate>
<script type="text/javascript">
var addressConfig = [
<asp:Placeholder ID="plcItems" runat="server"/>
];
</script>
</LayoutTemplate>
<ItemTemplate>
{
'id': '<asp:Literal runat="server" Text="<%# Eval("AddressID") %>" />',
'name':...
我做错了什么?
答案 0 :(得分:2)
我不确定你做错了什么,但这可能是你的字面意思。你可以这样做:
'id': '<%# Eval("AddressID") %>'
那说除了向你的脚本发送数组还有其他选择:
ClientScriptManager.RegisterArrayDeclaration内置于框架中。以下是从链接页面中获取的示例:
' Define the array name and values.
Dim arrName As String = "MyArray"
Dim arrValue As String = """1"", ""2"", ""text"""
' Get a ClientScriptManager reference from the Page class.
Dim cs As ClientScriptManager = Page.ClientScript
' Register the array with the Page class.
cs.RegisterArrayDeclaration(arrName, arrValue)
这将在表单关闭之前呈现以下数组:
var MyArray = new Array("1", "2", "text");
就个人而言,我更喜欢使用JavaScriptSerializer因为你可以自由地序列化任何对象:
Protected Function GetArray() As String
Dim exampleList As New List(Of Pair) From {New Pair(7, 4), New Pair("Foo", "Bar")}
Dim serializer As New Script.Serialization.JavaScriptSerializer()
Return serializer.Serialize(exampleDictionay)
End Function
然后,您可以随意将其添加到.aspx文件中:
var myArray = <%=GetArray()%>;
实际上呈现为数组文字:
var myArray = [{"First":7,"Second":4},{"First":"Foo","Second":"Bar"}];
当然,你也可以在你的aspx标记中完成它:
<% Dim serializer As New Script.Serialization.JavaScriptSerializer() %>
var array = <%= serializer.Serialize({"look", "at", "this"})%>;
答案 1 :(得分:1)
在使用单引号和双引号的所有组合进行大量调整后,我最终通过将<script>
标记放在文字中来解决此问题。即:
<LayoutTemplate>
<asp:Literal runat="server" Text='<script type="text/javascript">' />
var macroConfig = [
<asp:Placeholder ID="plcItems" runat="server"/>
];
$(document).ready(function () {
...
});
<asp:Literal runat="server" Text='</script>' />
</LayoutTemplate>
似乎解析器与script
标记结束和服务器控件标记开始的位置混淆。