Это объясняется тем, что когда вы используете BinaryWrite() для возврата "сырого" изображения, то теряете возможность добавлять любое дополнительное HTML-содержимое.
Чтобы справиться с этой проблемой, нужно создать другую страницу, которая вызовет ваш код, генерирующий изображение. Лучший способ сделать это — заменить вашу страницу, генерирующую изображение, выделенным обработчиком HTТР, который сгенерирует графический вывод. Таким образом, вы сэкономите на накладных расходах полной модели Web-форм ASP.NET, которую вы все равно не можете здесь использовать (обработчики HTTP рассматриваются в главе 5).
Создать, нужный обработчик HTTP довольно просто. Вы просто должны создать класс, реализующий интерфейс IHttpHandler, с методом ProcessRequest(). Обработчик HTTP извлечет идентификатор записи, которую нужно отобразить из строки запроса. Так выглядит полный код обработчика HTTP:
public class ImageFromDB : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string connectionString =
WebConfigurationManager.ConnectionStrings["Pubs"].ConnectionString;
// Get the ID for this request.
// Получить идентификатор (ID) для данного запроса.
string id = context.Request.QueryString["id"];
if (id == null)
throw new ApplicationException("Must specify ID.");
// Create a parameterized command for this record.
// Создать параметризованную команду для данной записи.
SqlConnection con = new SqlConnection(connectionString);
string SQL = "SELECT logo FROM pub_info WHERE pub_id=@ID";
SqlCommand cmd = new SqlCommand(SQL, con);
cmd.Parameters.AddWithValue("@ID", id);
try
{
con.Open();
SqlDataReader r =
cmd.ExecuteReader(CommandBehavior.SequentialAccess);
if (r.Read())
{
int bufferSize = 100; // Size of the buffer.
byte[] bytes = new byte[bufferSize]; // The buffer.
long bytesRead; // The # of bytes read.
long readFrom = 0; // The starting index.
// Read the field 100 bytes at a time.
// Читать поле по 100 байт за раз.
do
{
bytesRead = r.GetBytes(0, readFrom, bytes, 0, bufferSize);
context.Response.BinaryWrite(bytes);
readFrom += bufferSize;
} while (bytesRead == bufferSize);
}
r.Close();
}
предыдущая следующая страница вначало главы оглавление
473