JavaScript块内的服务器控件

时间:2015-11-06 10:59:43

标签: javascript asp.net webforms

我正在尝试将数据库中的项目列表呈现为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':...

我做错了什么?

2 个答案:

答案 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标记结束和服务器控件标记开始的位置混淆。