Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 限制asp.net mvc应用程序中的功能?_C#_.net_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

C# 限制asp.net mvc应用程序中的功能?

C# 限制asp.net mvc应用程序中的功能?,c#,.net,asp.net-mvc,asp.net-mvc-3,C#,.net,Asp.net Mvc,Asp.net Mvc 3,我想知道什么是限制帐户功能的最佳方式 假设我有一个免费帐户和一个高级帐户。我如何限制只有高级帐户才能获得的功能 现在我唯一能想到的就是视图中有很多“if语句” 我需要限制的一些项目是 Jquery Ui选项卡(Premium帐户有一个额外的Jquery Ui选项卡-free有4个,而Premium有5个) 所以现在这意味着我需要打开if语句来隐藏无序列表,并为包含它的div打开一个语句。如果我使用ajax标签,可能会有一个 超链接。我有一些超链接加载jquery对话框,这些对话框需要再次对自由用

我想知道什么是限制帐户功能的最佳方式

假设我有一个免费帐户和一个高级帐户。我如何限制只有高级帐户才能获得的功能

现在我唯一能想到的就是视图中有很多“if语句”

我需要限制的一些项目是

  • Jquery Ui选项卡(Premium帐户有一个额外的Jquery Ui选项卡-free有4个,而Premium有5个)
  • 所以现在这意味着我需要打开if语句来隐藏无序列表,并为包含它的div打开一个语句。如果我使用ajax标签,可能会有一个

  • 超链接。我有一些超链接加载jquery对话框,这些对话框需要再次对自由用户隐藏。我唯一能想到的就是if语句
  • 这些都是我预期中需要对免费帐户隐藏的东西

    我认为所有这些“if语句”在视图中看起来很糟糕,但是我不想有多个视图(一个视图用于免费帐户,另一个视图用于高级帐户),因为这意味着我可能不得不开始重复代码(即使使用部分视图),因为现在我有更多的文件要查看,所以会变得更加混乱,创建和确定要使用的操作结果

    在一个网站上,我尝试了多个帐户和操作结果视图,但结果并不理想


    那么最好的方法是什么呢?

    首先,您需要将此逻辑添加到控制器,而不是视图。您将向视图发送一些数据,这些数据向视图发出信号,表明它应该显示高级功能与标准功能。但是,关于您是处于高级状态还是标准状态的决定应该在控制器中做出

    因此,您的视图可能有if语句或某种逻辑来决定是否显示某些功能,但它们将基于您从控制器发送的“accountlevel”数据

    如果要将“If”语句放入视图中,或者在您的示例中,您应该考虑编写一个HTML帮助程序。这将大大清理您的代码。与编写多个if不同,视图中应该有类似于HtmlHelper.JQueryTabs()的内容。在JQueryTabs方法中,根据帐户级别,您将拥有输出适当HTML/Javascript的所有逻辑


    下面是一篇关于

    的文章,您可以使用一个视图模型,其中包含两个集合,一个用于链接,另一个用于选项卡。控制器将根据用户的权限填充这些内容。在视图中,您可以遍历这些集合并相应地显示它们

    我将通过在成员资格提供者下创建角色来实现这一点。然后,您可以按照以下方式装饰整个控制器或其中的操作:

    [Authorize(Roles = "Premium")]
    public virtual ActionResult ShowPremiumContent()
    {
        return View();
    }
    
    网上有一些很好的资源,为同一个游戏提供了不同的方法:


    当然,决策将在服务器级别(可能是业务层)做出。视图中的“if”语句只是检查是否应该呈现该区域。我在考虑html帮助程序,但有时我觉得它们会让事情变得更糟,然后更好,尤其是在样式设计方面(您必须硬编码帮助程序中的类,或者将它们全部传递给帮助程序)@Harryyott-当你谈论链接或选项卡时,你是在谈论包含实际html标记的VM,还是说有一个我在视图中循环的集合?我是说你在视图中循环的集合。可能是一个字典,键是链接文本,值是URL,如果只有一个链接会弹出一个对话框,该怎么办。你会让它仍然是一个循环还是只执行一个if语句?它可以是视图模型上的一个bool属性和视图中的一个if(虽然?:看起来可能更容易),或者如果它仍然太混乱,则是一个局部视图,它接受一对包含if的参数。我想这也取决于你如何编写脚本;如果链接本身中有onclick属性(这不是推荐的方法),可以将其放在另一个属性(可能是元组或其他内容)中,或者用正确的方法,将所有脚本放在一个单独的.js文件中。在这种情况下,脚本可以检查链接是否存在。我将使用Authorize属性Regularless,但我不知道这是否能解决我的问题(至少不是我想要的方式)。例如,我有一个对话框,其中的一个表单被拆分为多个选项卡(虽然都是相同的表单)。免费帐户可能会少看到一个选项卡,但在提交时,所有选项卡都将由同一控制器减去免费帐户中不存在的选项卡的信息。因此,如果我放置了一个授权标签,需要一个高级帐户,那么我将需要采取措施将其发送到正确的区域(一个免费,一个高级)。这是我现在不想做的事情……我需要一些逻辑来确定通过ajax发送它的操作方法。我可能需要将这些部分提取到他们自己的脚本中,对它们进行更改,并在帐户加载时加载正确的脚本,诸如此类。chobo2-明白了。因此,您确实需要一个在控制器/服务级别区分免费和高级的接口(这里我指的是代码接口,而不是具体的强类型类)。我还认为,带有角色检查的html助手可能是一个很好的方法,也许可以使用一个代码实现来检查服务类@jim中的角色-您可以详细介绍一下接口吗。在视图中会是什么样子?你是在说制作虚拟机的接口吗?