如何通过用户控件使用swfobject嵌入多个Flash Player实例?

时间:2009-11-28 21:01:28

标签: asp.net flash user-controls swfobject

我在MasterPage中的页面上有一个ListView,还有一些非常难看的丑陋的自动生成ID。

例如......“ctl00_workbenchPlaceHolder_ListView1_ctrl1_LibItem2One”

使用swfobject.embedSWF(...)要求我在我的页面上移交div的id,该id可以用object / embed标记替换,具体取决于浏览器上下文。

我的目标是向用户展示他们上传到他们网站的视频集,以便他们可以查看这些视频并根据需要更改一些相关数据。

因此,ListView通过SQLDataSource填充,该SQLDataSource当前提供了许多指向.flv文件的URL。

但是如果我把< div id =“replaceme”>< / div>'放进去就行不通在我的用户控件中,因为我可能会有多个id =“replaceme”,而糟糕的swfobject会不喜欢它。

所以我的邪恶解决方案是放一个< asp:Literal>在我的usercontrol中,将脚本,函数名和div标签id构建为字符串。

如果从数据库中检索的库对象是视频并切换到MultiView控件的相关视图,则调用ApplyVideoConfiguration。

    protected void ApplyVideoConfiguration()
{
    MultiViewLibItem.ActiveViewIndex = 3;
    string functionName = "MakeFlashFor_" + this.ClientID;
    string divId = "fp" + this.ClientID;
    VideoScriptLiteral.Text =
        "<script type=\"text/javascript\">" +
        "Sys.Application.add_load(" + functionName + ");" + 
        "function " + functionName + "(){" +
        "swfobject.embedSWF('PanamaVideoThumbnail.swf', '" + divId + "', '140', '127', '10');" +
        "};" +

        "</script>" + 
        "<div id=\"" + divId + "\" ></div>" ;
}

我想知道,这个解决方案有多糟糕,在最佳实践方面我真的完全缺乏经验但我的直觉告诉我这很糟糕,尽管它确实成功地嵌入了一些Flash Player实例

任何人都可以帮助我让它美丽吗?

1 个答案:

答案 0 :(得分:2)

嗯,我发现了一种改进的(也不那么令人尴尬的)解决方案。

首先,我仔细阅读了swfobject2_2文档。

决定我应该把更多的肘部油脂加入其中并实际写出一些标记!

所以我尝试使用&lt; object runat =“server”&gt;我可以从代码隐藏中管理但是发现ASP.Net有用的标签不会让你这样做...

便士终于放弃了我可以使用内联代码在每个数据绑定ListViewItem的基础上对我的标记进行处理。

我的结果:

            <asp:View runat="server" ID="VideoView">
                <% string flashvars = "videourl=../../" + ItemRelativeUri;%>
                <object id="flashplayer" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="110" height="90" name="obout">
                    <param name="movie" value="flash/libview.swf" />
                    <param name="flashvars" value="<% = flashvars %>" />
                    <asp:Literal runat="server" ID="LiteralParamFlashVars" />
                    <!--[if !IE]>-->
                    <object type="application/x-shockwave-flash" 
                    data="flash/libview.swf?<% =flashvars %>"
                     width="110"
                        height="90" name="obin">
                        <!--<![endif]-->
                        <p>
                            You need Flash Player v 10 or better to view this video.</p>
                        <!--[if !IE]>-->
                    </object>
                    <!--<![endif]-->
                </object>
            </asp:View>