Как лучше встраивать несколько экземпляров Flash Player, используя swfobject через usercontrol? - PullRequest
1 голос
/ 29 ноября 2009

У меня есть ListView на странице в пределах MasterPage и несколько очень некрасивых некрасивых автоматически сгенерированных идентификаторов.

Например ... "ctl00_workbenchPlaceHolder_ListView1_ctrl1_LibItem2One"

Использование swfobject.embedSWF (...) требует от меня передачи идентификатора div на моей странице, который может быть заменен разметкой объекта / встраивания в зависимости от контекста браузера.

Моя цель - показать пользователям коллекцию видео, которые они загрузили на свой веб-сайт, чтобы они могли просматривать их и при необходимости изменять некоторые связанные данные.

Отсюда ListView, который заполняется через SQLDataSource, который в настоящее время предоставляет несколько URL-адресов, указывающих на файлы .flv.

Но это не сработает, если я добавлю

'в свой пользовательский элемент управления, потому что тогда у меня может быть более одного id = "replaceme" и плохому swfobject не понравится это.

Так что мое злое решение состоит в том, чтобы поместить в мой usercontrol и построить скрипт, имя функции и идентификатор тега div в виде строки.

ApplyVideoConfiguration вызывается, если объект библиотеки, извлеченный из базы данных, представляет собой видео и переключается на соответствующий вид элемента управления MultiView.

    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 Ответ

2 голосов
/ 30 ноября 2009

Хм, я нашел улучшенное (и также менее смущающее) решение.

Для начала я внимательно прочитал документацию по swfobject2_2.

Решил, что я действительно должен добавить больше смазки для локтя и написать некоторую разметку!

Поэтому я попытался использовать тег , которым я мог бы управлять из codebehind, но обнаружил, что 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>
...