2011-01-20 76 views
2

我正在使用UpdatePanel中的用戶控件。用戶控件使用swfobject將flash對象添加到用戶控件中的div。用戶控件的部分功能是允許用戶更改「頻道」。該頻道在後面的代碼中設置和處理,因此在下面的JavaScript中調用<%= channel%>。ASP.NET AJAX部分回發,動態JavaScript值

我遇到的問題是,當新通道保存時,下面的JavaScript代碼仍然指向舊通道。我可以解決這個問題的唯一方法是通過後面的代碼刷新頁面,但我認爲必須有更好的方法來做到這一點...

任何人都可以幫忙嗎?

<script type="text/javascript"> 
//Required to readd the widget to the div after partial postback 
var prm = Sys.WebForms.PageRequestManager.getInstance(); 
prm.add_pageLoaded(flashVideo_<%=widgetId%>); 

// SWFObject embed 
function flashVideo_<%=widgetId%>() { 
    var flashvars = { 
    initialURL: escape(document.location), 
    paramXMLPath: "/videoprotoype/single-video.aspx?channel=<%=channel%>"   
    } 
    var params = { 
     bgcolor: "#121212", 
     allowfullscreen: "true" 
    } 
    var attributes = {} 
    swfobject.embedSWF("/videoprotoype/assets/slideshowpro.swf", "video_<%=widgetId%>", "285", "215", "10.0.0", false, flashvars, params, attributes); 
} 
</script> 
<div id="video_<%=widgetId%>"> 
</div> 

回答

1

難道是在頁面級(在<head>部分地方)申報當前所選通道的全局變量的解決方案:

<script type="text/javascript"> 
    var channel = <%=channel%>; 
</script> 

使用此變量在你的JavaScript,而不是使用ASP.NET代碼「塊」(<%...%>)。

現在,當用戶改變,你可以註冊一個啓動腳本,將更新頻道可變通道和UpdatePanel重載指向新:

代碼隱藏:

ScriptManager.RegisterStartupScript(myCustomControl, myCustomControl.GetType(), 
    Guid.NewGuid().ToString(), "channel = " + channel, true); 

在哪裏「mycustomControl」是用戶控件的一個實例。

希望這會幫助你。