您的位置:首页 > 其它

使用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: