在业务层实现ASP.NET幻灯片效果
作者:admin 日期:2008-08-29
原本以为很简单的一个小功能,没想到也花了一点时间去磨了几下。遇到问题当然是先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
逻辑层中的代码:
///
/// 显示图片新闻列表
///
/// 每页纪录数
///
///
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上的一个源码程序(新浪新闻图片实现效果)
点击下载此文件
看了一下它实现的代码:
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]
特别感谢网友 爱在戏院前,提醒可以用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
{
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
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
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();
}
}
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 | 查看次数: 9637
过客[2009-01-04 02:05 PM | | | 121.28.7.173 | | 取消审核 | 回复]
如果不考虑个性化定制的话,这个字符串应该放在全局缓存中
写的东西很牛但能实现吗?
admin 回复
能不能实现,只有你自己试了才知道。如果你不尝试,那你永远也不知道你能做什么。
发表评论