无法将图像生成表单提交到新网页

时间:2016-03-30 13:33:46

标签: c# asp.net

我有一个生成条形码的webapp:

protected void btnGenerate_Click(object sender, EventArgs e)
{
    string barCode = Barcode + txtCode.Text;
    System.Web.UI.WebControls.Image imgBarCode = new  System.Web.UI.WebControls.Image();
    using (Bitmap bitMap = new Bitmap(barCode.Length * 50, 90))
    {
       using (Graphics graphics = Graphics.FromImage(bitMap))
       {
          Font oFont = new Font("IDAutomationHC39M", 18);
          PointF point = new PointF(3f, 3f);
          SolidBrush blackBrush = new SolidBrush(Color.Black);
          SolidBrush whiteBrush = new SolidBrush(Color.White);
          graphics.FillRectangle(whiteBrush, 0, 0, bitMap.Width, bitMap.Height);
          graphics.DrawString(barCode, oFont, blackBrush, point);
       }
       using (MemoryStream ms = new MemoryStream())
       {
         bitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
         byte[] byteImage = ms.ToArray();

         Convert.ToBase64String(byteImage);
         imgBarCode.ImageUrl = "data:image/png;base64," + Convert.ToBase64String(byteImage);
        }

           plBarCode.Controls.Add(imgBarCode);
}

它在同一页面上生成条形码,我希望这样做,一旦按下按钮,就会在新网页中显示结果。

我创建了一个会话

Session.Add("BarCodes", plBarCode);
Response.Redirect("barcodes.aspx);

然后在barcordes.aspx页面上“

protected void Page_Load(object sender, EventArgs e)
{
  plbcode = (PlaceHolder)Session["Barcodes"];
}

这是不正确的,因为没有任何显示,但我不知道还有什么可以尝试。我知道我不能使用imgBarCode,因为它会抛出一个Invalid Cast的例外。

1 个答案:

答案 0 :(得分:0)

在会话中保持WebControl并不是一个好主意。更好的方法是将条形码图像生成代码移动到第二页,并通过querystring传递所有必要的参数:

imgBarCode.ImageUrl = "barcodes.aspx?text=foobar&barcode=12345...";

第二页生成图像并将其直接写入Output流,内容类型为image/png,不带任何html标记。只有图像数据。