LoginSignup
5
6

More than 5 years have passed since last update.

ASP.NET Coreのタグへルパを自作してViewModelの値を出力する

Last updated at Posted at 2019-04-04

何をしたいのか

任意のcshtmlが以下のようなモデルを@modelで指定されていたとする。


public class SampleViewModel
{
    public int TheAnswer { get; set; } = 42;
}

で、これを以下のようなタグをcshtmlに指定すると

<display-value asp-for="TheAnswer"></display-value>

下記のように書き換えてくれる


<div>TheAnswer:<strong>  42</strong></div>

書き換えるタグへルパを作ると起動すれば良いのか備忘録的に。

但し、Asp.net coreを始めて3日目くらいなので、何かと至らない点が多々有るかと。。。
なので、何かあればご指定期頂ければこれ幸い。

タグへルパを作る

タグへルパは以下の通り


    public class ValueDisplayTagHelper:TagHelper
    {
        [HtmlAttributeName("asp-for")]
        public ModelExpression Target { get; set; }
        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            output.TagName = "div";

            output.Content.SetHtmlContent($@"{Target.Name}:<strong> {Target.Model}</strong>");
        }
    }

Targetの別名をasp-forにすることで、cshtml側でインテリセンスが効く。

cshtml側での仕込み

アセンブリの名前が、WebApplication3として自作タグへルパのスコープを有効にするには、

@addTagHelper *, WebApplication3

と記載するして、アセンブリ内の全てのタグへルパを有効化するか、厳密に単一のタグへルパのみ有効にするなら

@addTagHelper WebApplication3.TagHelpers.ValueDisplayTagHelper,WebApplication3

と記載する。

タグの使用方法

ここまで出来たら、以下のように書くことで、ViewModelを表示できる


@model SampleViewModel

@{
    ViewData["Title"] = "Home Page";
}

<value-display asp-for="TheAnswer"></value-display>


参考にしたページ

ASP.NET Core のタグ ヘルパー
How to create TagHelper who's value is a Model Property (without using @Model)?
First Dynamic Form Tag Helper Attempt - Tech Dominator

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6