8

MVC 6 でカスタム タグ ヘルパーを作成しようとしていますが、うまくいきません。

これは、Web アプリ プロジェクトで定義された私のデモ タグ ヘルパー クラスです。

namespace Microsoft.AspNet.Mvc.TagHelpers
{
    [TargetElement("demo", Attributes = CustomAttributeName)]
    public class DemoTagHelper : TagHelper
    {
        private const string CustomAttributeName = "asp-custom";

        [HtmlAttributeName(CustomAttributeName)]
        public string Custom { get; set; }

        public string Value { get; set; }


        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            output.TagName = "div";
            output.Attributes["foo"] = "bar";
        }
    }
}

これは私が私の見解でそれを使用する方法です:

<demo asp-custom="hello world!">
    Please work this time :)
</demo>

私は多くのことを試しました。属性を削除TargetElementするか、名前空間を変更しました。何も変わらない...結果は同じです。

ちなみに、私のMicrosoft.AspNet.Mvc.TagHelpersのバージョンは6.0.0-beta4です。

たぶん、タグヘルパーをどこかに登録する必要がありますか? MVC ソース コードを調べたところ、独自のタグ ヘルパーがどこにも参照されていませんでした。なので登録は不要だと思います。

ここで問題はどこにありますか?

4

2 に答える 2

6

Views ディレクトリにあるファイルにディレクティブをTagHelper追加することで、カスタム タグの処理を有効にすることができます。addTagHelper_ViewImports.cshtml

@addTagHelper "*, YourMvcAssembly"

アップデート

@yilmaz はMicrosoft.AspNet.Tooling.Razor、以下のコメントで詳しく説明されているように、への参照を追加する必要もありました。

于 2015-05-20T11:43:24.203 に答える
2

これは、現在カスタム タグ ヘルパー用に持っているもので、動作します。デモ要素をターゲットにするように変更しました。やってみて:

namespace TestingTagHelpers.TagHelpers
{
    using Microsoft.AspNet.Razor.Runtime.TagHelpers;
    using System;

    /// <summary>
    /// <see cref="ITagHelper"/> implementation targeting &lt;demo&gt; elements.
    /// </summary>
    //[TargetElement("demo")]
    public class DemoTagHelper : TagHelper
    {
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            var childContent = context.GetChildContentAsync().Result;
            string demoContent = childContent.GetContent();
            string demo = context.AllAttributes["asp-custom"].ToString();

            output.TagName = "div";
            output.Attributes.Clear();
            output.Attributes["data-custom"] = demo;
            output.Content.SetContent(demoContent);
        }
    }
}
于 2015-05-20T11:45:47.413 に答える