0

我想创建一个从数据库调用图像的 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>

4

1 回答 1

0

您可以请求处理程序在 ajax 滑块 Web 服务中显示来自数据库的图像,如下所示:

[System.Web.Services.WebMethodAttribute()]
[System.Web.Script.Services.ScriptMethodAttribute()]

public static AjaxControlToolkit.Slide[] GetSlides()
{
    CAProcessAccess ImageProc = new CAProcessAccess("master"); //CAProcessAccess class that obtains data from database
    DataSet ds = ImageProc.GetRecords("", "SP_Gallery_Image", "GETID", comCode, proCode, "", "");
    DataTable dt = ds.Tables[0];

    AjaxControlToolkit.Slide[] slides = new AjaxControlToolkit.Slide[dt.Rows.Count];

    for (int i = 0; i < dt.Rows.Count; i++)
    {
        int imgID = Convert.ToInt32(dt.Rows[i]["ID"]);
        slides[i] = new AjaxControlToolkit.Slide("ShowImage.ashx?ID=" + imgID, "test", "test"); //sending the imgID to the handler to show which image will be viewed in slide
    }

    return slides;
}

对于自动播放,您可以在 SlideShowExtender ID="Slideshowextender"(演示代码)中设置 AutoPlay="true"。

于 2014-01-09T04:17:36.983 回答