使用Ajax SlideShowExtender传参的两种方法(.net 2.0/3.5)
2009-02-03 10:11
525 查看
其实在n久前就做好了Ajax效果的相册,不过那时候空间商提供的是.net framework 2.0, 昨天和供应商联系将框架升级到3.5,检查兼容性时发现SlideShowExtender的传参方法在新环境下发生虚拟路径错误,今天在解决了这个问题后写出此文将两种传参方法写出来为大家提供参考。
Ajax相册效果请参见这个页面:
http://www.bosnma.com/welcome/photos.aspx
所谓的Ajax效果的相册就是实现像Windows幻灯那样无缝隙,无刷新,平滑切换的效果,这会很大程度上优化UE(用户体验)。
如果使用SlideShowExtender网上资料很多,在这里不再重复,本文仅说明如果处理使用SlideShowExtender的特殊情况。
该SlideShowExtender使用web service进行图片信息(路径,标题,说明等)的获取,因为一般的相册模块都是动态的从数据库中获取路径或文件名,所以我们需要在请求web service时添加参数以便该web服务返回我们需要的信息。我们可以这样写(在.net 2.0环境下工作良好):
<ajaxToolkit:SlideShowExtender ID="SlideShowExtender1" AutoPlay="false" ImageDescriptionLabelID="lblInstruction"
ImageTitleLabelID="lblTitle" Loop="true" NextButtonID="Btn_Next" PlayButtonID="Btn_Play"
PlayButtonText="自动播放" StopButtonText="停止播放" PreviousButtonID="Btn_Previous" SlideShowServiceMethod="GetSlides"
PlayInterval="5000" SlideShowServicePath="~/webservices/PhotoService.asmx" TargetControlID="imgPhoto"
runat="server">
</ajaxToolkit:SlideShowExtender>
注意加粗的文字,这里SlideShowServicePath设定了独立的web service的路径,SlideShowServiceMethod指定了web方法。网上的教程(包括官方的SampleWebsite)大都使用Web Page Method(在.aspx文件中加一个web method实现简单的静态图片获取),这里为了方便重用采用独立的web service.下一步就非常简单了,在Page_Load事件处理函数中添加参数传递:
SlideShowExtender1.SlideShowServiceMethod = "GetSlides?Id=" + ID;
这很类似于页面的QueryString,在web service中的GetSlides方法中我们只需要使用:
int id = int.Parse(HttpContext.Current.Request.QueryString["Id"]);
就可以获取传入的参数。之后我们可以通过这个Id来得到我们想要的信息,完整的GetSlide函数:
[WebMethod]
[System.Web.Script.Services.ScriptMethod]
public AjaxControlToolkit.Slide[] GetSlides()
{
int id = int.Parse(HttpContext.Current.Request.QueryString["Id"]);
PhotoBLL photoBLL = new PhotoBLL();
Photo photo = photoBLL.GetSinglePhoto(id);
int albumId = photo.AlbumId;
List<Photo> photos = photoBLL.GetPhoto(0, photoBLL.GetPhotoNum(albumId), albumId);
int startFlag = 0;
for(int i=0;i<photos.Count;i++)
if (photos[i].Id == id)
{
startFlag = i;
break;
}
for (int i = 0; i < startFlag; i++)
{
photos.Insert(photos.Count, photos[0]);
photos.RemoveAt(0);
}
AjaxControlToolkit.Slide[] slides = new AjaxControlToolkit.Slide[photos.Count];
for (int i = 0; i < photos.Count; i++)
{
slides[i] = new AjaxControlToolkit.Slide("../UploadFiles/" + photos[i].Url, photos[i].Title, photos[i].Description);
}
return (slides);
}
遗憾的是,这种方式在.net 3.5中并不能正常工作,没关系,我们还有其他的办法。
其他的不变,我们只需要将Page_Load中的
SlideShowExtender1.SlideShowServiceMethod = "GetSlides?Id=" + ID;
改为:SlideShowExtender1.ContextKey = ID.ToString();
并且web service中获取参数的语句改为:
int id = int.Parse(contextKey.ToString());
我们就可以通过这个ContextKey上下文来传递参数了。该方法在.net 3.5环境下工作良好。
Written by Kim
Bosnma原创文章,转载未经允许请勿改动
http://www.bosnma.com
Ajax相册效果请参见这个页面:
http://www.bosnma.com/welcome/photos.aspx
所谓的Ajax效果的相册就是实现像Windows幻灯那样无缝隙,无刷新,平滑切换的效果,这会很大程度上优化UE(用户体验)。
如果使用SlideShowExtender网上资料很多,在这里不再重复,本文仅说明如果处理使用SlideShowExtender的特殊情况。
该SlideShowExtender使用web service进行图片信息(路径,标题,说明等)的获取,因为一般的相册模块都是动态的从数据库中获取路径或文件名,所以我们需要在请求web service时添加参数以便该web服务返回我们需要的信息。我们可以这样写(在.net 2.0环境下工作良好):
<ajaxToolkit:SlideShowExtender ID="SlideShowExtender1" AutoPlay="false" ImageDescriptionLabelID="lblInstruction"
ImageTitleLabelID="lblTitle" Loop="true" NextButtonID="Btn_Next" PlayButtonID="Btn_Play"
PlayButtonText="自动播放" StopButtonText="停止播放" PreviousButtonID="Btn_Previous" SlideShowServiceMethod="GetSlides"
PlayInterval="5000" SlideShowServicePath="~/webservices/PhotoService.asmx" TargetControlID="imgPhoto"
runat="server">
</ajaxToolkit:SlideShowExtender>
注意加粗的文字,这里SlideShowServicePath设定了独立的web service的路径,SlideShowServiceMethod指定了web方法。网上的教程(包括官方的SampleWebsite)大都使用Web Page Method(在.aspx文件中加一个web method实现简单的静态图片获取),这里为了方便重用采用独立的web service.下一步就非常简单了,在Page_Load事件处理函数中添加参数传递:
SlideShowExtender1.SlideShowServiceMethod = "GetSlides?Id=" + ID;
这很类似于页面的QueryString,在web service中的GetSlides方法中我们只需要使用:
int id = int.Parse(HttpContext.Current.Request.QueryString["Id"]);
就可以获取传入的参数。之后我们可以通过这个Id来得到我们想要的信息,完整的GetSlide函数:
[WebMethod]
[System.Web.Script.Services.ScriptMethod]
public AjaxControlToolkit.Slide[] GetSlides()
{
int id = int.Parse(HttpContext.Current.Request.QueryString["Id"]);
PhotoBLL photoBLL = new PhotoBLL();
Photo photo = photoBLL.GetSinglePhoto(id);
int albumId = photo.AlbumId;
List<Photo> photos = photoBLL.GetPhoto(0, photoBLL.GetPhotoNum(albumId), albumId);
int startFlag = 0;
for(int i=0;i<photos.Count;i++)
if (photos[i].Id == id)
{
startFlag = i;
break;
}
for (int i = 0; i < startFlag; i++)
{
photos.Insert(photos.Count, photos[0]);
photos.RemoveAt(0);
}
AjaxControlToolkit.Slide[] slides = new AjaxControlToolkit.Slide[photos.Count];
for (int i = 0; i < photos.Count; i++)
{
slides[i] = new AjaxControlToolkit.Slide("../UploadFiles/" + photos[i].Url, photos[i].Title, photos[i].Description);
}
return (slides);
}
遗憾的是,这种方式在.net 3.5中并不能正常工作,没关系,我们还有其他的办法。
其他的不变,我们只需要将Page_Load中的
SlideShowExtender1.SlideShowServiceMethod = "GetSlides?Id=" + ID;
改为:SlideShowExtender1.ContextKey = ID.ToString();
并且web service中获取参数的语句改为:
int id = int.Parse(contextKey.ToString());
我们就可以通过这个ContextKey上下文来传递参数了。该方法在.net 3.5环境下工作良好。
Written by Kim
Bosnma原创文章,转载未经允许请勿改动
http://www.bosnma.com
相关文章推荐
- 在.net 2.0中使用iframe并且控制不出现横向的滚动条的方法
- 在.NET中发送邮件,使用回执功能中遇到问题的解决方法[在NOTES服务器上,C#,.NET2.0环境]
- SOS使用详解(.NET 2.0/3.0/3.5)
- .net使用用户名和密码访问远程共享文件夹的两种方法
- .NET进阶学习之使用ASP.NET两种发送邮件的方法
- 在.net 2.0/3.0程序中使用扩展方法
- uoLib - .Net 项目基础类库 基于C#, 可用于.Net Framework 2.0/3.5, 免费下载使用
- 在ASP.NET 4.0中使用.NET 2.0的请求验证行为方法(转)
- .NET 2.0中的Eval使用方法总结(未完成,续)
- 安装.net 4.0 后,.net 2.0 程序无法使用解决方法
- .NET 使用C#两种发送邮件的方法
- 在 .NET 2.0上使用“扩展方法”
- 使用.NET进行中文繁简转换的两种方法
- vs2008中让基于.net 2.0的应用程序也可以使用扩展方法
- .Net 2.0中使用扩展方法
- uoLib - .Net 项目基础类库 基于C#, 可用于.Net Framework 2.0/3.5, 免费下载使用
- .NET 2.0 中,两种如何创建一个线程安全的 UI 的方法
- 在.net 2.0/3.0程序中使用扩展方法
- 如何使用Javascript调用.NET 2.0用户控件中的方法和属性
- 在.NET 3.5 平台上使用LINQ to SQL创建三层/多层Web应用系统 (Part 3)