したがって、ビューの次の部分があるとしましょう。
<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(...))
{
...
}