2

したがって、ビューの次の部分があるとしましょう。

<td>
    @Html.ActionLink("Delete")
</td>

ユーザーが特定の権限を持っている場合にのみ、これを利用できるようにしたい - DeleteItems. これを行ういくつかの方法は、リンクをifステートメントでラップするかActionLink、一連のアクセス許可を受け取るヘルパーのオーバーロードを作成することです。

Ifバージョン:

@if (User.HasPermission(Permissions.DeleteItems))
{
<td>
    @Html.ActionLink("Delete", "Delete")
</td>
}

過負荷バージョン:

<td>
    @Html.ActionLink("Delete", "Delete", Permissions.DeleteItems)
</td>

クール - ここで明らかな勝者はオーバーロードだと思います。

しかし、遮断したい領域がより広い場合はどうなりますか?

<div class="deleteWrapper">
    <table>
        <tr>
            <td>Id</td>
            <td></td>
        </tr>
        @foreach (var item in items)
        {
            <tr>
                <td>@item.Id</td>
                <td>@Html.ActionLink("Delete", "Delete", new { id = @item.Id })
            </tr>
        }
    </table>
</div>

もちろん、このバージョンは引き続き機能しますが、ビューのどこにでも表示しIfたくはありません。@if (User.Has...(...))私が気に入っているのは、次の構文ですHtml.BeginForm

@using(Html.BeginForm(...))
{
    ...
}

ただし、BeginForm 応答に追加するだけです。実際には、ブラケット間のビューの一部では何もしません。ヘルパーを使用して括弧内のマークアップを削除する方法はありますか?

@using(Html.ShowIf(...))
{
    ...
}
4

1 に答える 1