asp.netコアの条件に基づいてhtmlタグをレンダリングする


ASP.NET CORE に基づくアプリケーションで Razor を使用している場合、何かを確認し、それに従って HTML タグを生成し、クライアントに表示したい場合があります.たとえば、一般的なことの 1 つは、ユーザーがログインしているかどうかを確認するときです.ユーザーがログインしていない場合は [ログイン] ボタンを表示し、それ以外の場合は Sign-out ボタンを表示します.
これを達成するために、次のようなコードになります.

if (User.Identity.IsAuthenticated)
{
    <a href="/Account/Signout">SignOut</a>
}
else {
<a href="/Account/SignIn">SignIn</a>
}


これは問題なく、私たちが望むことを行いますが、もっとクリーンだと思う方法がもう 1 つあります.それは Tag Helper を使用することです.
カスタム タグ ヘルパーを実装した後、コードをリファクタリングして、以下のように HTML タグをレンダリングできます.

<a href="/Account/Signout" condition=="@User.Identity.IsAuthenticated">SignOut</a>


上記のように、if ステートメントはなく、condition タグで HTML を使用し、それに boolean 値を渡しただけです.
Condition タグ ヘルパーの実装は次のとおりです.


 using Microsoft.AspNetCore.Razor.TagHelpers;

namespace CustomTagHelpers.TagHelpers
{
    [HtmlTargetElement(Attributes = nameof(Condition))]
     public class ConditionTagHelper : TagHelper
    {
        public bool Condition { get; set; }

        public override void Process(TagHelperContext context, TagHelperOutput output)
        {
            if (!Condition)
            {
                output.SuppressOutput();
            }
        }
    }
}


この tag helpe をすべての views で使用できるようにするには、その namespace_ViewImports.cshtml に追加します.

Condition tag helper renders output when passed a true value.