显示来自db的图像以及其他网页元素

时间:2013-12-17 21:07:01

标签: asp.net database vb.net image

关于display (not download) image from db

的问题的延续
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="imgTest1.aspx.vb" Inherits="imgTest" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <div style="background-color: aliceblue;">
                <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
                <br />
                <br />
                <br />
                <br />
            </div>

            <div style="background-color: burlywood;">
                <asp:Image ID="Image1" runat="server" ImageUrl="imgTest1.aspx?id=1" />
                <br />
                <br />
                <br />
            </div>

        </div>
    </form>
</body>
</html>



Imports System.IO
Imports System.Data
Imports System.Data.SqlClient

Partial Class imgTest
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load

        If Request.QueryString("id") IsNot Nothing Then

            Dim strQuery As String = "select name, contentType, data from [imageTest] where id=1"
            Dim cmd As SqlCommand = New SqlCommand(strQuery)
            cmd.Parameters.Add("@id", SqlDbType.Int).Value = Convert.ToInt32("1")

            Dim dt As DataTable = GetData(cmd)

            If dt IsNot Nothing Then
                Dim bytes() As Byte = CType(dt.Rows(0)("data"), Byte())
                Response.Buffer = True
                Response.Charset = ""
                Response.Cache.SetCacheability(HttpCacheability.NoCache)
                Response.ContentType = dt.Rows(0)("ContentType").ToString()
                Response.AddHeader("content-disposition", "filename=" & dt.Rows(0)("name").ToString())
                Response.BinaryWrite(bytes)
                Response.Flush()
                Response.End()
            End If

        End If

    End Sub

    Public Function GetData(ByVal cmd As SqlCommand) As DataTable
        Dim dt As New DataTable
        Dim strConnString As String = System.Configuration.ConfigurationManager.ConnectionStrings("CapstoneConnectionString1").ConnectionString
        Dim con As New SqlConnection(strConnString)
        Dim sda As New SqlDataAdapter
        cmd.CommandType = CommandType.Text
        cmd.Connection = con
        Try
            con.Open()
            sda.SelectCommand = cmd
            sda.Fill(dt)
            Return dt
        Catch ex As Exception
            Response.Write(ex.Message)
            Return Nothing
        Finally
            con.Close()
            sda.Dispose()
            con.Dispose()
        End Try
    End Function

End Class

我现在可以在aspx页面上显示图像,但只显示图像,缺少所有其他网页元素。

1 个答案:

答案 0 :(得分:1)

考虑到以下情况,我只能想到一个原因:

  1. 用于渲染内容的页面是imgTest1.aspx以及用于返回图像的页面也是imgTest1.aspx。
  2. 始终使用查询参数id。调用
  3. imgTest1.aspx

    因为此页面始终返回图像。

    您可以按如下方式更改代码并告诉我们它是如何工作的:

    ...
    ...
    <asp:Image ID="Image1" runat="server" ImageUrl="imgTest1.aspx?imageId=1" />
    ...
    ...
    

    和代码隐藏

    If Request.QueryString("imageId") IsNot Nothing Then
    
        Dim strQuery As String = "select name, contentType, data from [imageTest] where id=1"
        Dim cmd As SqlCommand = New SqlCommand(strQuery)
        cmd.Parameters.Add("@id", SqlDbType.Int).Value = Convert.ToInt32("1")