MVC 3添加到部分视图的动态链接

时间:2012-09-25 12:42:02

标签: asp.net-mvc-3 partial-views dynamic-loading

我们正在使用MVC 3构建一个带有动态菜单选项的网站,以便用户只能看到基于组和个人权限可以看到的菜单选项(动作链接)。

我们如何在运行时添加动态菜单选项(指向部分视图的链接)? 我们是否使用可见性选项对所有部分视图的所有链接进行硬编码并转换不需要的部分视图? 我们可以从数据库中动态添加链接吗?

让我澄清一下。 我们的管理员可以访问所有菜单选项,例如管理用户,管理组,管理供应商,管理产品和管理订单。 我们有定期销售人员,他们只需要管理Supliers和Manage Orders。 因此,基于此,我们只需要显示管理订单和管理供应商的链接。因此,他们试图建立链接的动态性质。 我们在数据库中设置了权限。

Jawahar

2 个答案:

答案 0 :(得分:0)

当您说“链接到部分视图”时,我不确定我完全理解您的意思。你从来没有真正拥有部分视图的超链接。我能想到的两种可能性是要么你想知道如何有条件地嵌入局部视图,要么你想要有一个返回部分视图的控制器动作的超链接。

在第一种情况下,您可以将@ Html.RenderPartial调用放在@if(myCondition == true)块中。这样,只有条件通过才会显示局部视图。

在第二种情况下,您可以随时调用控制器操作。在您的控制器中,只有在条件匹配时才返回PartialView。否则,返回null。

答案 1 :(得分:0)

我找到了一种方法,使用带有IPrincipal的方法扩展

public static bool IsAllowed(this IPrincipal p, string menuid) { 
if (p.Identity.IsAuthenticated) { 
         //Code here to verify privillegs against Database
     } 
     return false; 
} 

This would keep it fairly neat in you Layout.cshtml. 

@if (User.IsAllowed("menuchoice1")) { 
        <a href="@Url.Action(...)">...</a> 
} 
@if (User.IsAllowed("menuchoice2")) { 
      <a href="@Url.Action(...)>...</a> 
} 

希望这有助于其他人寻找类似的选择