下載AjaxControlToolkitSampleSite的範例網站就可以看到完整範例
照著用也都非常的ok,也應用到前個案子上面,輕鬆愉快。
問題是現在著手的新案子,PM要求也要使用Slide Show的方式,
筆者馬上答應,沒想到才是痛苦的開始,先說說問題點
AjaxControlToolkitSampleSite的範例網站的使用方式是用在
Codebeside裡面,假設你的網頁叫Menu.aspx那Slide Show的Ajax是寫在Menu.aspx.vb
卡點一:
因為筆者本身有使用UrlRewritingNet.UrlRewriter.dll為的就是SEO優化
會自動把MENUS.aspx?mm_Id=4&smt=1轉成是MENUS_SOUP.aspx
也就是二者是相通的,然後在Codebeside用到Request.Query("mm_Id")和Request.Query("mm_Id")
一執行MENUS_SOUP.aspx,馬上報錯,可是執行MENUS.aspx?mm_Id=4&smt=1確可以
網頁上一切正常,可是用Fiddler查看Url居然會自動加料變成MENUS.aspx?mm_Id=4&smt=1/GetSlides
本來想放棄直接使用MENUS.aspx?mm_Id=4&smt=1帶參數的方式表現時,另一個問題又來了
卡點二:
要把Slide Show放入Repeater裡面,假定有三筆資料,每筆資料裡面又有自己的圖,而且圖都要變換,有可能是第一筆資料有5張圖,第二筆料有10張圖,第三筆資料有7張圖。
PM想要的就是每資料內的Slide Show,
解法:
一定要用Web Service了,而且是要帶參數的
取一個MenuPhotoWebService.asmx
<%@ WebService Language="VB" Class="MenuPhotoWebService" %>
Imports System
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Linq
Imports AjaxControlToolkit
Public Class MenuPhotoWebService
Inherits System.Web.Services.WebService
Public Function GetSlides(ByVal contextKey As String) As AjaxControlToolkit.Slide()
Dim db As New vb.StarryNightDataClassesDataContext()
Dim mp = (From p In db.Menus_Photo _
Where p.mp_sm_Id = CType(contextKey, Integer) _
Select p).ToList()
If mp IsNot Nothing Then
Dim result As AjaxControlToolkit.Slide() = New AjaxControlToolkit.Slide() {}
Array.Resize(result, mp.Count)
Dim i As Integer = 0
For Each m In mp
result(i) = New AjaxControlToolkit.Slide("images/Menus/S" + m.mp_img_Name, "", "")
i += 1
Next
Return result
End If
Return Nothing
End Function
End Class
前端頁面如下
〈asp:Repeater ID="rpt_menu_detail" runat="server" DataSourceID="ods_menu_details"〉
〈ItemTemplate〉
〈asp:Image ID="imgLeft" ImageAlign="AbsMiddle" runat="server" CssClass="img-l" /〉
〈ajaxToolkit:SlideShowExtender ID="SlideShowExtenderLeft" runat="server" TargetControlID="imgLeft" SlideShowServiceMethod="GetSlides"
UseContextKey="true" ContextKey='〈%#Eval("sm_Id")%〉' SlideShowServicePath="~/MenuPhotoWebService.asmx" AutoPlay="true"
Loop="true" /〉
〈/ItemTemplate〉
〈/asp:Repeater〉
重點是 UseContextKey ContextKey 看出來了嗎^^
分享使用微軟開發工具及工作上會遇到的疑難雜症
2011-03-07
ASP.NET Slideshowextender Using WebService
訂閱:
張貼留言 (Atom)
0 comments:
張貼留言