在业务层实现ASP.NET幻灯片效果

原本以为很简单的一个小功能,没想到也花了一点时间去磨了几下。遇到问题当然是先www.g.cn一下,然而所找到的结果都是将数据操作写在页面的后台。这样对于整个Solution尤其是分了几层的解决方案来说,要把数据库操作搞到页面上去是不太可取之处的吧。

特别感谢网友 爱在戏院前,提醒可以用json的模式去把前头的字符拼出来,返回个字符串回去就可以了。

注明:针对会多出一个空白框的问题,网友toDown已经给出解决方案. 特此感谢!

在循环之后去掉"|".

retPics = retPics.Remove(retPics.Length-1, 1);
        retLinks = retLinks.Remove(retLinks.Length-1, 1);
        retTitle= retTitle.Remove(retTitle.Length-1, 1);



欢迎大家指正错误,谢谢!



做幻灯片效果也的确是这样:要么就是用XML做数据源,要么就把从数据库中读取到的参数值传到FlashVar中,实现显示效果。

说明一下:我这里用到的是一个最常用的一种效果

截图:





文件:
一个前台显示的AD.SWF

Flash动画




逻辑层中的代码:



  ///
        /// 显示图片新闻列表
        ///

        /// 每页纪录数
        ///
        ///
        public IList PicNewsList(int PageSize, int PageIndex)
        {
            SqlParameter[] parameters =
                {
                    new SqlParameter("@tblName", SqlDbType.VarChar, 255),
                    new SqlParameter("@strGetFields", SqlDbType.VarChar, 1000),
                    new SqlParameter("@fldName", SqlDbType.VarChar, 255),
                    new SqlParameter("@PageSize", SqlDbType.Int),
                    new SqlParameter("@PageIndex", SqlDbType.Int),
                    new SqlParameter("@doCount", SqlDbType.Bit),
                    new SqlParameter("@OrderType", SqlDbType.Bit),
                    new SqlParameter("@strWhere", SqlDbType.VarChar, 1500)
                };


            parameters[0].Value = "Njsq_News";
            parameters[1].Value = "*";
            parameters[2].Value = "NewsID";
            parameters[3].Value = PageSize;
            parameters[4].Value = PageIndex;
            parameters[5].Value = 0;
            parameters[6].Value = 1;
            parameters[7].Value = "NewsIndexPicPath IS NOT NULL";

            try
            {
                IList newsList = new List();

                Model.NewsInfo objNews = new NewsInfo();
                using (SqlDataReader dr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringProfile, CommandType.StoredProcedure, "UP_GetCollectionPage", parameters))
                {
                    while (dr.Read())
                    {
                        newsList.Add(Populater(dr));

                    }

                }
                return newsList;
            }
            catch (Exception e)
            {
                throw e;
            }
        }



        ///
        /// 返回UI层的幻灯片字符串
        ///

        ///
        public static string PicNews()
        {
            IList list = new List();

            BLL.News bllNews = new News();

            list = bllNews.PicNewsList(5, 1); //调用上面的Method()

            StringBuilder retStr = new StringBuilder();

            StringBuilder retPics = new StringBuilder();

            StringBuilder retTitle = new StringBuilder();

            StringBuilder retLinks = new StringBuilder();

            string pics = "NewsCoverPic/";  //定义图片的路径,我这里是写死了,你可以设置成一个变量
            string title = string.Empty; //幻灯片中的新闻标题
            string links = "News/NewsDetail.aspx?NID="; //幻灯片中的链接格式

            for (int i = 0; i < list.Count; i++) //循环,
            {
                retPics.Append(pics).Append(list[i].NewsIndexPicPath.ToString()).Append("|");  //将图片路径获取后使用append()将图片路径串成一个字符串
                retTitle.Append(list[i].NewsTitle).Append("|"); //将标题获取后使用append()串成一个字符串
                retLinks.Append(links).Append(list[i].NewsID.ToString()).Append("|");//将链接格式及新闻参数ID获取后串成一个长字符串
            }



          string  retString="pics=" + retPics.ToString() + "&links=" + retLinks.ToString() + "&texts=" + retTitle.ToString() + "&borderwidth=340&borderheight=240&textheight=20"; //将retpics,rettitle,rettitle连成一个长字符串

          retStr.Append(retString.ToString());


            return retString.ToString(); //返回前台Flash所需的一个FlashVar的参数值
        }



说明一下:
大家可以看到我这里有些参数值是写死了,比如一些borderwith borderheight之流的,因为考虑到这些在实际运用过程上变化的因素不是很大,如果确实有这个必要从前端UI进行设置的话,可以将其作为变量值传送。当然,如果要扩充整个功能:建议是将在前端Flash的参数,整成一个object的属性,直接传一个实体到后台就行了。

再来看看前台的:javascript
因为后台的类是static模式,所以我们在前台调用就很方便了.

FlashVars="<%=BLL.News.PicNews() %>"  而我在前台页面的.cs(default.aspx.cs)中,没有添加任何代码

完整的javascript代码






这样就达到我们所需要的效果了,不过很奇怪的是这个只能接受jpg类型的图,算是一个bug吧.

除了FlashVars这个属性,像其它Menu bgColor width height 之类的,都可以作为参数传,怎么传就不用我来啰嗦了。

对比一下网上同行的实现模式:

附:CSDN上的一个源码程序(新浪新闻图片实现效果)


下载文件 点击下载此文件

看了一下它实现的代码:

public string flashUrl = "";
    public string flashAdd = "";
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            Flash();
        
        }
    }



private void  Flash()
    {
        SqlConnection con = new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["con"]);
        con.Open();
        SqlDataAdapter sda = new SqlDataAdapter("select  * from flash order by createdate Desc ", con);
        DataSet ds = new DataSet();
        sda.Fill(ds, "flash");
        DataView dv = ds.Tables[0].DefaultView;
       if(dv.Table.Rows.Count != 0)
        {
            for (int i = 0; i < dv.Table.Rows.Count; i++)
            {
                flashAdd += dv.Table.Rows[i]["FlashHref"].ToString() + "|";
                flashUrl += dv.Table.Rows[i]["FlashUrl"].ToString() + "|";
            }
            flashAdd = flashAdd.Substring(0, flashAdd.LastIndexOf("|"));
            flashUrl = flashUrl.Substring(0, flashUrl.LastIndexOf("|"));

        }



个人认为,除非用在比较简单的一些小网站中,要不其实际运用是不提倡这样的方法的吧。这只是个人之见哈。



一点小经验,与大家分享,欢迎多多指教, 再次感谢网友爱在戏院前。[em02]





[本日志由 admin 于 2008-11-07 05:44 AM 编辑]
上一篇: Web技术电子期刊2008年第7 8期(总第25期)
下一篇: Cookies的基本操作
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: ASP.NET幻灯片效果 ASP.NET幻灯片
相关日志:
评论: 2 | 引用: 0 | 查看次数: 9326
过客[2009-01-04 02:05 PM | | | 121.28.7.173 | del | 取消审核 | 回复回复]
如果不考虑个性化定制的话,这个字符串应该放在全局缓存中
你大爷[2008-10-21 05:27 PM | | | 218.28.200.16 | del | 取消审核 | 回复回复]
写的东西很牛但能实现吗?
回复来自 admin 的评论 admin 回复
能不能实现,只有你自己试了才知道。如果你不尝试,那你永远也不知道你能做什么。
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 30 字 | UBB代码 关闭 | [img]标签 关闭