无法在ASP.NET Core 2.0类项目中使用TagHelper在'cshtml'中添加条形码

时间:2018-09-25 14:40:20

标签: razor asp.net-core asp.net-core-2.0 barcode razorengine

我在ASP.Net core 2.0类库中使用 TagHelper 概念。

using Microsoft.AspNetCore.Razor.TagHelpers;
using ZXing.QrCode;
using System.Drawing;
using System.IO;
using System;

namespace DRC.Taxpayer.TagHelpers
{
    [HtmlTargetElement("barcode")]
    public class BarCodeTagHelper : TagHelper
    {
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            var content = context.AllAttributes["content"].Value.ToString();
            var width = int.Parse(context.AllAttributes["width"].Value.ToString());
            var height = int.Parse(context.AllAttributes["height"].Value.ToString());
            var barcodeWriterPixelData = new ZXing.BarcodeWriterPixelData
            {
                Format = ZXing.BarcodeFormat.CODE_128,
                Options = new QrCodeEncodingOptions
                {
                    Height = height,
                    Width = width,
                    Margin = 0
                }
            };

            var pixelData = barcodeWriterPixelData.Write(content);

            using (var bitmap = new Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb))
            {
                using (var memoryStream = new MemoryStream())
                {
                    var bitmapData = bitmap.LockBits(new Rectangle(0, 0, pixelData.Width, pixelData.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
                    try
                    {
                        System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan0, pixelData.Pixels.Length);
                    }
                    finally
                    {
                        bitmap.UnlockBits(bitmapData);
                    }
                    bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
                    output.TagName = "img";
                    output.Attributes.Clear();
                    output.Attributes.Add("width", width);
                    output.Attributes.Add("height", height);
                    output.Attributes.Add("src", string.Format("data:image/png,base64,{0}", Convert.ToBase64String(memoryStream.ToArray())));
                }
            }
        }
    }
}

CSHTML 中,我在标签帮助器中添加了以下内容:

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers;
@addTagHelper *, BarCodeTagHelper;

要在cshtml中设置barCode(使用剃须刀引擎,即 RazorEngine.Core.NetCore ),我在下面添加了一行代码:

但是,当我执行该应用程序时,它并没有考虑使用标签助手并将其保留为空白。

我在这方面做错了吗?

这是我在此处用于生成条形码的正确方法吗?在ASP.Net core 2.0中还有其他方法吗?

我已经尝试实施this answer中提供的解决方案,但是它对我不起作用。

0 个答案:

没有答案