根据条件渲染部分视图

3

我有几个部分视图,应该在用户具有特定角色时呈现。

现在,我想避免像下面这样做:

<% if(user is in role){..here goes the html.. }%>

我希望能够在ascx顶部执行以下操作:

<% this.RenderOnlyForRoles(list of roles) %>

现在,在BasePartialView中,当调用RenderOnlyForRoles时,我有一个角色列表会被填充。

问题是RenderOnlyForRoles是在我能想到的所有事件之后调用的:),而且我无法停止控件的渲染。

有什么想法可以得到我想要的结果吗?

编辑: 有人知道其他视图引擎是否支持这个吗?

2个回答

5
使用一个 HTMLHelper
public static void RenderOnlyForRoles(this HtmlHelper html, List<string> roles))
{
    if (check if user in roles)
    {
        html.RenderPartial(yourview);
    }
}

仁慈,

Dan


2
想要发布相同的内容。但这并不是他实际想要实现的目标。他希望明确地将角色责任检查委托给部分视图。 - Arnis Lapsa
啊,好的,但是这个逻辑应该放在控制器里面,不是吗?也许可以为相关的操作方法添加一个属性? - Daniel Elliott
好的...这是一个部分视图,所以我不知道在控制器中应该检查什么。我的意思是,我有一个视图,其中包含3个部分视图。任何时候只应显示一个部分视图。 - sirrocco
在你的控制器中,我会检查要呈现哪些视图,并将其发送到ViewModel或视图数据中。祝好,丹 - Daniel Elliott
1
我建议你做最简单的事情 - 在这种情况下,使用HTML助手。 这是代码 - 你总是可以在以后更改它。 - Jaco Pretorius

0

我倾向于使用多态来解决这种类型的挑战。在这种情况下,您可以拥有一个要呈现的基本视图。

当用户处于所需角色时,您呈现具体视图;否则,您可以呈现一个空视图,它基本上什么也不做。

直到ASP.NET MVC 2之前,您需要手动映射多态视图,但是我最近写了一篇博客文章,介绍了如何做到这一点


1
抱歉,我认为这个解决方案过于复杂了。在这种情况下,我建议您采用最简单的方法 - 可能是使用HTML助手。 - Jaco Pretorius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接