我想知道限制帐户功能的最佳方式是什么。
说我有免费帐户和高级帐户。如何限制只有高级帐户才能获得的功能?
现在我唯一能想到的就是视图中有很多“if语句”。
我需要限制的一些项目是。
所以现在这意味着我需要隐藏无序列表的if语句和包含它的div的一个语句。如果我使用ajax标签,也许就是一个。
这些是我期待我需要隐藏免费帐户的东西。
我认为在所有这些“if语句”的视图中看起来很讨厌但是我不想拥有多个视图(一个视图用于免费帐户,一个用于高级视图)因为这意味着我可能必须开始重复代码,(即使使用部分视图)也会变得更加混乱,因为现在我需要查看更多文件,创建更多操作结果并确定要使用哪些文件。
在一个网站上,我为帐户和操作结果尝试了多个视图,但效果不佳。
那么最好的方法是什么?
答案 0 :(得分:2)
首先,您需要将此逻辑添加到控制器,而不是视图。您将向视图发送一些数据,向其发出信号,表明它应显示高级与标准功能。但是关于你是否应该在控制器中进行高级或标准状态的决定。
因此,您的观点可能包含if语句或某种逻辑来决定是否显示某些功能,但它们将基于您从控制器发送的“accountlevel”数据。
如果您在视图中添加“if”语句,或者在您的情况下添加许多语句,则应该考虑编写HTML帮助程序。这会大大清理你的代码。您可以在视图中使用HtmlHelper.JQueryTabs(),而不是编写多个if。在JQueryTabs方法中,您可以根据帐户级别输出适当的HTML / Javascript。
的文章答案 1 :(得分:1)
您可以使用包含两个集合的视图模型,一个用于链接,另一个用于制表符。控制器将根据用户的权限填充这些内容。在视图中,您可以迭代这些集合并相应地显示它们。
答案 2 :(得分:0)
我会通过在会员提供者下创建角色来解决这个问题。然后你可以按照以下方式装饰整个控制器或其中的动作:
[Authorize(Roles = "Premium")]
public virtual ActionResult ShowPremiumContent()
{
return View();
}
网上有一些很好的资源可以为同一个游戏提供不同的方法:
http://geekswithblogs.net/thomasthedeuce/archive/2009/06/25/133056.aspx