javascript - 将对象数组传递到母版页的内容页

标签 javascript c# asp.net webforms

我有一个对象数组,这些对象是从文本文件中的 C# 代码中加载到服务器端的,我正试图将此数组传递到其中一个内容页面。当我不使用母版页时,它可以正常工作,但是一旦我添加了母版页,它就不再有效了。

这是 aspx.cs 页面:

 // Convert list of objects to a json array
 string jsonString = JsonConvert.SerializeObject(clownIncidents);
 cs.RegisterArrayDeclaration("markers", jsonString);

当我尝试在内容页面上访问它时,它说标记未定义:

<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder1" 
    Runat="Server">    
    <div id="map" ></div>  
    <script src ="jss/Maps.js"></script>
    <script src="https://maps.googleapis.com/maps/api/js?
    key=MYKEYcallback=initMap"></script>  
</asp:Content>

最后是内容页面中引用的 JavaScript:

function initMap() {
    alert(markers);
}

最佳答案

这是因为从 cs.RegisterArrayDeclaration("markers", jsonString); 生成的 JavaScript 代码出现在内容页面中脚本之后的 HTML 中。因此,当您的脚本运行时,变量 markers尚未定义。

为了克服这个问题,您需要添加一个新的 <asp:ContentPlaceHolder>在您的母版页中,它必须在 <form runat="server"> 之后元素并使用该 ContentPlaceHolder 来获取您的 JavaScript。

例如,您的母版页将是:

<form runat="server">
<%-- Here is your Master page --%>
</form>
<asp:ContentPlaceHolder ID="ScriptContentPlaceHolder" runat="server">
</asp:ContentPlaceHolder>

然后,在您的 .aspx 内容页面中,您可以使用这样的脚本(在您的 .aspx 页面末尾添加以下代码段):

<asp:Content ID="Content2" ContentPlaceHolderID="ScriptContentPlaceHolder" runat="server">
    <div id="map" ></div>  
    <script src ="jss/Maps.js"></script>
    <script src="https://maps.googleapis.com/maps/api/js?
    key=MYKEYcallback=initMap"></script> 
</asp:Content>

关于javascript - 将对象数组传递到母版页的内容页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43307742/

相关文章:

javascript - 更改完整日历中单元格的颜色

c# - 使用 Azure 存储异步创建 blob 时出现异常 - UploadTextAsync

c# - 如何在 WPF View 中获取无效值

asp.net - 如何更改 "Debug"的配置?

JavaScript 不包含列表项中的值

javascript - 编辑此工具提示实现,使工具提示等待 x 秒隐藏

asp.net - 如何创建通用 StateManagedCollection?

android - 每 x 分钟通过 android 设备将更新的 GPS 坐标自动发送到 Web 服务器

javascript - 当用户离开选项卡时暂停的 setInterval()?

c# - C# 中的 "javadoc"