我正在使用UpdatePanel内的用户控件。用户控件使用swfobject将flash对象添加到用户控件中的div。用户控件的部分功能是允许用户更改“频道”。频道在后面的代码中设置和处理,因此下面的JavaScript中的调用为<%= channel%>。
我遇到的问题是,当保存新频道时,下面的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>
答案 0 :(得分:1)
我会看看以下链接:
http://www.ajaxtutorials.com/ajax-tutorials/updating-an-updatepanel-programmatically-in-c/
http://basgun.wordpress.com/2008/02/27/realtime-dynamic-clock-using-aspnet-ajax-updatepanel/
http://encosia.com/2007/07/13/easily-refresh-an-updatepanel-using-javascript/
您可能希望利用__doPostBack()
刷新UpdatePanel。
答案 1 :(得分:1)
在页面级别(<head>
部分的某个地方)为当前选定的频道声明全局变量是否是一种解决方案:
<script type="text/javascript">
var channel = <%=channel%>;
</script>
在Javascript中使用此变量,而不是使用ASP.NET代码“nuggets”(<%...%>
)。
现在,当用户更改频道并重新加载UpdatePanel
时,您可以注册一个启动脚本,该脚本将更新频道变量以指向新频道:
代码隐藏:
ScriptManager.RegisterStartupScript(myCustomControl, myCustomControl.GetType(),
Guid.NewGuid().ToString(), "channel = " + channel, true);
其中“mycustomControl”是您的用户控件的实例。
希望这会对你有所帮助。