#何をしたいのか
任意の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