我有一个对象数组,这些对象是从我试图将此数组传递到其中一个内容页面的文本文件的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);
}
答案 0 :(得分:1)
这是因为从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>