データベースから画像を呼び出す ajax スライドショーを作成したいと思います。
作業中のハンドラー ページがあります。このハンドラーは、ID に基づいて Image 列からバイトを取得し、そのバイトを画像としてブラウザーに送り返します。どうすればよいかわからないのは、画像をリクエストしてスライドショーを設定する方法です。
また、オートプレイのやり方も知りたいです。
これは私のハンドラです:
<%@ WebHandler Language="C#" Class="Handler" %>
using System;
using System.Web;
using System.Data.SqlClient;
using System.Data;
using System.IO;
using System.Collections.Specialized;
public class Handler : IHttpHandler {
public void ProcessRequest(HttpContext context)
{
string id = context.Request.QueryString["imageID"]; //get the querystring value that was pass on the ImageURL
if (id != null)
{
MemoryStream memoryStream = new MemoryStream();
SqlConnection conn = new SqlConnection("Data Source=19-20\\sqlexpress;" + "Initial Catalog = mpsip; Integrated Security = SSPI");
string sql = "SELECT * FROM Image WHERE imageID = @id";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.AddWithValue("@id", id);
conn.Open();
SqlDataReader reader = cmd.ExecuteReader();
reader.Read();
//Get Image Data
byte[] file = (byte[])reader["Image"];
reader.Close();
conn.Close();
memoryStream.Write(file, 0, file.Length);
context.Response.Buffer = true;
context.Response.BinaryWrite(file);
memoryStream.Dispose();
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
これは背後にあるコードです
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AjaxControlToolkit;
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
public partial class ImageGallery : System.Web.UI.Page
{
private static DataTable tblData = new DataTable();
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection("Data Source=19-20\\sqlexpress;" + "Initial Catalog = mpsip; Integrated Security = SSPI");
SqlCommand cmd = new SqlCommand("SELECT * FROM image" , conn);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
tblData = new DataTable();
adapter.Fill(tblData);
Slideshowextender.SlideShowServiceMethod = "Handler.ashx?imageID=" + Request.QueryString["imageID"];
if (tblData.Rows.Count > 0)
{
Image2.ImageUrl = tblData.Rows[0]["image"].ToString();
}
}
[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public static AjaxControlToolkit.Slide[] GetImage()
{
AjaxControlToolkit.Slide[] slides = new AjaxControlToolkit.Slide[tblData.Rows.Count];
for (int i = 0; i < tblData.Rows.Count; i++)
{
DataRow dr = tblData.Rows[i];
slides[i] = new AjaxControlToolkit.Slide();
}
return slides;
}
}
これは私のプレゼンテーションコードです:
<%@ Page Title="" Language="C#" MasterPageFile="~/MainMasterPage.master" AutoEventWireup="true" CodeFile="ImageGallery.aspx.cs" Inherits="ImageGallery" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<p>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<br />
<br />
<asp:Button runat="Server" ID="prevButton" Text="Prev" Font-Size="Medium" />
<asp:Button runat="Server" ID="playButton" Text="Play" Font-Size="Medium" />
<asp:Button runat="Server" ID="nextButton" Text="Next" Font-Size="Medium" />
<asp:SlideShowExtender ID="Slideshowextender" runat="server" PreviousButtonID="Button1"
NextButtonID="Button3" PlayButtonID="Button2" TargetControlID="Image2"
SlideShowServiceMethod="GetImage" PlayInterval="5000" PlayButtonText="Play"
StopButtonText="Stop" UseContextKey="True"></asp:SlideShowExtender>
<br />
</p>