繁体   English   中英

如何将数据库值从asp.net传递到javascript函数(slideshowpro)?

[英]How to pass a database value from asp.net to a javascript function (slideshowpro)?

我有一些网页,其中包含由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#),所以我非常感谢提供非常准确和完整的解决方案的帮助,因为我一定会弄错语法。

非常感谢。

没有代码就可以查看这一切。 但是,一旦决定使事情动态化,通常会引入像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之类的覆盖实用程序,它可以让您完全绕过对辅助页面的调用。 这完全取决于项目要求。

希望这能使您朝正确的方向前进。

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

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显示,因此我放弃了。也许我应该更努力地尝试)

有什么建议/意见吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM