所以,假设我有以下部分观点:
<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(...))
{
...
}