从后面的代码加载运行JS方法

时间:2011-03-10 17:21:32

标签: javascript asp.net

我正在尝试加载以下JS方法:

 <script type="text/javascript">
    function initialize(lon,lat) {
    var myLatlng = new google.maps.LatLng(lon,lan);
    var myOptions = {
    zoom: 14,
    center: myLatlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    var map = new google.maps.Map(document.getElementById("map"), myOptions);

    var marker = new google.maps.Marker({
    position: myLatlng, 
    map: map
    });   
    }
</script>

在我的VB.NET代码中,我想加载如:

initialize(53.349803617967446, -6.260257065296173)

我需要加载代码,因为我必须从DB中获取longtidude和latidude。

4 个答案:

答案 0 :(得分:1)

通常最好的做法是直接从后面的代码调用Javascript函数。后面的代码是在页面呈现之前发生的代码。

我要做的是在页面中添加两个隐藏的文字,latitudelongitude,并在DOM ready事件上调用初始化函数。 initialize函数将从创建的文字中检索纬度/经度值。

Here is a good resource如果您不熟悉,请了解DOM就绪事件。

编辑:如果以上不是一个选项,您可以以相当迂回的方式从代码隐藏中“调用”它(这几乎与我的其他解决方案在功能上相同)。

<body runat="server">

让你的身体标签看起来像这样,然后将其添加到代码隐藏:

var javascriptFunction = string.format("javascript:initialize({0}, {1})", latValue, longValue);
Body.Attributes.Add("Onload", javascriptFunction);

答案 1 :(得分:1)

Chuck建议的替代方法 - 您可以将函数保留在.aspx中,并使用内联代码将这些值直接写入Javascript,如下所示:

initialize(<%=strLat%>, <%=strLon%>)

strLat和strLon将被定义为代码隐藏中的受保护变量。

如果你真的希望代码隐藏写出整个函数,请查看RegisterClientScriptBlock方法。

答案 2 :(得分:0)

您可以使用RegisterClientScriptBlock从代码隐藏中将Javascript插入到页面中。

您可以将其插入到要注册的任何函数中,并将其格式化为:

ClientScriptManager.RegisterClientScriptBlock(typeof(this), "SomeKeyName", "initialize(" + lat + "," + long + ");", true);

其中SomeKeyName是一个唯一键,可防止每次回发多次添加脚本。

答案 3 :(得分:0)

如果必须从代码隐藏中注册函数和调用,则需要使用ScriptManager.RegisterClientScriptBlock作为函数,并使用ScriptManager.RegisterStartupScript来调用函数。如果函数的呈现不依赖于服务器代码中的任何内容,那么最好不要从代码中注册它。