我最近有一個類似的問題,試圖在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,它只是以該數據作爲參數調用該函數。
我們的團隊處理這
謝謝你,這很好。 –