我可以使用控制器属性隐藏Razor视图中的链接吗?

时间:2013-04-30 16:18:02

标签: asp.net-mvc

我在其中一个分片视图中有这段代码:

<li>
   <a href="@Url.Action("Index","Campaigns")" class="tables"><span>Campaigns</span></a>
</li>

在广告系列控制器上,我有一个自定义AuthorizeAttribute,如下所示:

[AuthorizeRoles(Roles = "admin")]
public class CampaignsController : Controller
{
    ...
}

问题是,如果用户不是admin,即使控制器不可访问,链接仍在呈现中。

我正在使用自定义实现,因此,.IsInRole等标准授权方法无效。

有没有办法将属性应用到我的控制器方法,如果用户没有访问权限而隐藏链接,而不使用.IsInRole

1 个答案:

答案 0 :(得分:1)

您可以创建自己的扩展方法来扩展MvcHtmlString,以便根据条件呈现Action事物

public static MvcHtmlString IfAllowed(this MvcHtmlString action, bool allowed)
{
  return allowed? action:String.Empty;
}

当你使用时,我不知道你的自定义东西是如何工作的,但是根据你的自定义角色传递布尔值

<li>
   @Html.ActionLink("Index","Champaigns").IfAllowed(true/false)
</li>