我有一个生成条形码的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的例外。
答案 0 :(得分:0)
在会话中保持WebControl并不是一个好主意。更好的方法是将条形码图像生成代码移动到第二页,并通过querystring传递所有必要的参数:
imgBarCode.ImageUrl = "barcodes.aspx?text=foobar&barcode=12345...";
第二页生成图像并将其直接写入Output
流,内容类型为image/png
,不带任何html标记。只有图像数据。