2014-04-01 31 views
2

內的地圖我有一個谷歌地圖谷歌更新面板

var marker5450635326848240000000 = new google.maps.Marker({ 
          position: new google.maps.LatLng(31.2272,-85.4072), 
          map: map, 
          title: '4/10/2014' 
         }); 

         markers.push(marker5450635326848240000000); 

我有地圖加上一個UpdatePanel內下拉輸出javascript中的中繼器。當用戶更改下拉菜單時,更新面板會更新所有內容,但地圖上的引腳不會更改。

這裏是例子:http://prod.windcreekhospitality.bkwld.onyxtek.com/Giving-Back/Good-on-the-Go.aspx

我知道這是更新面板,因爲當我把面板出它的工作原理方程。

http://windcreekhospitality.com/Giving-Back/Good-on-the-Go

其中,是ASCX http://pastebin.com/FqX0PndG

這整個代碼是一個ascx控件,它是建立與Kentico CMS使用。這限制了我的選擇。

回答

2

我最近有一個類似的問題,試圖在UpdatePanel中集成驗證碼腳本。

UpdatePanel中的腳本塊僅在初始頁面加載時被瀏覽器識別。由於UpdatePanels的工作方式,任何新的腳本標記都不會被正確注入到瀏覽器中,以便它們實際執行。

一種解決方法是使用ScriptManager.RegisterStartupScript方法從代碼隱藏中動態註冊腳本塊。然後,ASP.NET的ajax庫將正確地處理註冊JavaScript代碼並調用它來執行。

如果您將UpdatePanel控件作爲第一個參數傳遞給RegisterStartupScript(),則代碼將包含在第一頁加載的渲染,任何完整回發和每個部分回發(如果該UpdatePanel正在更新)中。

在代碼隱藏中,將JavaScript構建爲字符串,然後將其傳遞給RegisterStartupScript。例如:

protected override void OnPreRender(EventArgs e) 
    { 
     var s = new StringBuilder(); 
     s.Append(@" 
      var markers = []; 
      var currentWindow; 
      var myLatlng = new google.maps.LatLng(32.3617,-86.2792); 
      var mapOptions = { 
       zoom: 6, 
       center: myLatlng, 
       scrollwheel: false 
      }; 
      var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions); 
      $('#map-canvas').mouseleave(function(){ 
       if(currentWindow) 
        currentWindow.close(); 
      }); 
      google.maps.event.addListener(map, 'mousedown', function() { 
      if(currentWindow) 
       currentWindow.close(); 
     });"); 

     // TODO: manually do whatever that cms:CMSRepeater control would be done to generate the additional JS and append it to the StringBuilder. 

     ScriptManager.RegisterClientScriptBlock(EventsUpdatePanel, GetType(), "InitMap", s.ToString(), true); 

     base.OnPreRender(e); 
    } 

更好地將分離出的功能inits地圖,移動它是在UpdatePanel之外,和它作爲參數傳遞你希望它初始化數據。讓代碼隱藏生成JS,它只是以該數據作爲參數調用該函數。

我們的團隊處理這
+0

謝謝你,這很好。 –

0

一種方法通過對Web部件(這裏是你的地圖)添加以下 issueis - > Envelope->前內容

<script type="text/javascript"> 
function MyFunction() { 
     ...... 
} 
MyFunction(); 
Sys.Application.add_load(MyFunction); 
</script> 

而且,把腳本標籤外的中繼器(看你的Pastbin代碼),並按照上面的描述調用pageLoad方法。