将TagHelpers移动到其他项目后,不会调用它

时间:2017-12-07 09:13:24

标签: c# asp.net-mvc asp.net-core asp.net-core-mvc

我遇到一些asp.net核心没有找到并调用我的标记助手的问题。在我将taghelpers从单独的程序集( LC.Tools.Utility.TagHelpers )移动到 LC.Tools.Utility 之后,即使名称空间是名称,它们似乎也未被发现和以前一样。

示例cshtml

<lc:css src="styles.min.css" />
<lc:css src="styles.bootstrap.min.css" />
<lc:css src="styles._layout.min.css" />

查看页面的来源时,标签完全相同。

_ViewImports.cshtml

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 
@addTagHelper *, LC.Smokers.Albino.TagHelpers
@addTagHelper *, LC.Tools.Utility.TagHelpers

LC.Tools.Utility.TagHelpers.IncludeCssTagHelper.cs in assembly LC.Tools.Utility ):

using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Razor.TagHelpers;

namespace LC.Tools.Utility.TagHelpers
{
    [HtmlTargetElement("lc:css", Attributes = "src", TagStructure = TagStructure.WithoutEndTag)]
    public class IncludeCssTagHelper : Base
    {
        public IncludeCssTagHelper(IHostingEnvironment env) : base(env) { }

        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            output.TagName = "link";
            output.TagMode = TagMode.SelfClosing;

            bool isDebug = this.Environment.IsDevelopment() && this.DebugSrc.Length > 0;
            string path = "/CSS/";

            if (isDebug)
            {
                path += this.DebugSrc;

                if (Utility.IsUrl(this.DebugSrc))
                {
                    path = this.DebugSrc;
                }
            }
            else if (!string.IsNullOrEmpty(this.Src))
            {
                path += this.Src;

                if (Utility.IsUrl(this.Src))
                {
                    path = this.Src;
                }
            }

            output.Attributes.Clear();

            output.Attributes.SetAttribute("href", path.ToLower());
            output.Attributes.SetAttribute("rel", "stylesheet");
            output.Attributes.SetAttribute("type", "text/css");

            base.Process(context, output);
        }

        [HtmlAttributeName("src")]
        public string Src { get; set; }

        [HtmlAttributeName("debug-src")]
        public string DebugSrc { get; set; } = string.Empty;
    }
}
  

我尝试删除所有项目中的bin和obj文件夹   重建整个解决方案并删除并添加引用   项目

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

addTagHelper指令需要两个以逗号分隔的参数。 docs可以说明它是如何运作的:

  

@addTagHelper之后的第一个参数指定要加载的Tag Helpers(我们使用&#34; *&#34;表示所有Tag Helpers),第二个参数&#34; Microsoft.AspNetCore.Mvc.TagHelpers&# 34;指定包含Tag Helpers的程序集

请注意我以粗体突出显示的内容:它不是所需的命名空间;这是集会。在您的示例中,您需要更改第二个参数以反映新的主机程序集:

@addTagHelper *, LC.Tools.Utility