0

我的网页包含由 javascript 提供支持的幻灯片,以及由 asp.net 提供支持的数据库连接。幻灯片运行 Flash 文件,其 URL 存储在数据库中。

静态页面的标题中会包含以下内容:

> <script type="text/javascript"> var expressInstallSwfurl = {}; var
> flashvars = {}; var params = {}; var attributes = {};
> swfobject.embedSWF("/_flash/2909.swf", "slideshowdisplay", "575",
> "300", "9.0.0", expressInstallSwfurl, flashvars, { wmode:
> "transparent" }, attributes);  </script>

... 其中/_flash/2909.swf是静态页面的 flash 文件的 URL,“slideshowdisplay”是目标 div。

现在我需要动态调用 flash 文件,例如用 <%# Eval("myflashfileURL") %> 之类的东西替换静态 2909 以从数据源获取文件名。这失败了: swfobject.embedSWF(<%# Eval("myflashfileURL") %>, ....

我的 javascript 很糟糕,而且我是 asp 的初学者(我会说一些 VB,但不会说 C#),所以我非常感谢提供一个非常准确和完整的解决方案的帮助,因为我一定会弄错语法。

非常感谢。

4

2 回答 2

0

经过几个小时的激怒,这是我设法开始工作的一个非常丑陋的答案。这是一种“将值放入隐藏控件”的方法。

1 在 asp.net 表单中的某处放置一个空标签控件,其中包含工具提示中的 URL 参数的字段。


<asp:FormView ID="Form1" runat="server" DataSourceID="MyDatabase"> 
  <ItemTemplate> 
    <asp:Label ID="flashfile" 
      Tooltip='<%#Eval("myFlashFileURL")%>' 
      runat="server" 
      visible="true"
      ClientIDMode="static"/> 
  </ItemTemplate> 
</asp:FormView>

这将返回一个以字段值作为标题的空 span 元素:

<span id="flashfile" title="/_flash/12345.swf"></span>

请注意,如果隐藏了 asp.control (visible="false"),则不会生成任何 HTML,因此客户端 javascript 将无法读取任何内容。

一个空的 span 元素似乎是一个合理的技巧,因为它对用户是不可见的,但是将后台数据放在工具提示中并不是一个好习惯。

2 将加载flash 文件的脚本放置在span 元素之后(例如,在最后,就在结束body 标记之前)。

3 定义一个javascript变量,从span元素中获取它的值,并将变量放入swfobject.embedSWF中:


<script type="text/javascript">
        var mySWFfile = {};
        mySWFfile = document.getElementById("flashfile").title;
        var expressInstallSwfurl = {};
        var flashvars = {};
        var params = {};
        var attributes = {};
        swfobject.embedSWF(mySWFfile, "wideshow", "575", "300", "9.0.0",
        expressInstallSwfurl, flashvars, { wmode: "transparent" }, attributes); 
</script>

我讨厌这个,但它有效。页面性能似乎很慢。

必须有更优雅/更有效的方法来做同样的事情。

(我之前尝试在代码隐藏中创建一个变量,从而避免在页面上需要一个控件,但我发现我无法轻松地使该变量对 javascript 可见,所以我放弃了。也许我应该更加努力.)

有什么建议/意见吗?

于 2013-05-15T16:38:09.933 回答
0

没有代码查看这一切都是猜测。但是一旦你决定让事情变得动态,你通常会引入像 GridView 这样的 asp 控件,其中包含数据行,其中是指向静态页面的链接,现在动态文件名作为参数传递。

所以你的代码看起来像这样:

<script type="text/javascript"> 
    var expressInstallSwfurl = {}; 
    var flashvars = {}; 
    var params = {}; 
    var attributes = {};
    swfobject.embedSWF('<%=Request("flashfile")%>', "slideshowdisplay", "575", "300", "9.0.0", expressInstallSwfurl, flashvars, { wmode: "transparent" }, attributes);  
</script>

"flashfile"页面的参数在哪里

并继续使用 GridView 的示例,您将拥有类似这样的内容(这只是一个片段):

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1" >
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <a href='Your_static_page.aspx?flashfile=<%= Eval("myflashfileURL")%>'
            </ItemTemplate>
        </asp:TemplateField>
     </Columns>
</asp:GridView>

请注意,有很多方法可以实现动态解决方案,另一种是像 Modal 或 ColorBox 这样的覆盖实用程序,它允许您完全绕过对辅助页面的调用。这一切都取决于项目的要求。

希望这能让你朝着正确的方向前进。

于 2013-05-14T18:15:33.133 回答