【问题标题】:MVC Views | How do *YOU* handle IsAuthenticated Scenarios?MVC 视图 | *YOU* 如何处理 IsAuthenticated 场景?
【发布时间】:2009-03-31 00:35:53
【问题描述】:

通常,在允许会员资格的网站中,您希望为您的用户提供一些只有在登录时才可见的数据。

对于我的网站,如果登录用户是数据所有者,我想提供一些工具让他们管理数据。

我的问题是这样的。您是否将这项职责分为两种不同的观点?为“普通”用户加载的一个视图,为“所有者”用户加载的另一个视图。普通用户看到的视图只是显示数据。所有者可以看到数据和一些管理数据的工具。

或者,您是否在单个视图中执行检查并在其中隐藏/显示块(类似于您在常规 ASP.NET 中所做的)?

这可能是出于偏好,但是在两个视图和单个视图之间划分职责是否有任何技术原因?

【问题讨论】:

    标签: asp.net-mvc views


    【解决方案1】:

    我也会选择单一视图选项。 将在您的视图数据上提供特定属性以指示要执行的操作。

    <% if (Model.IsOwner) { %>
        //Html for owner
    <% } %>
    

    【讨论】:

    • 从字面上看,这正是我的观点。 IsOwner 也是我传递给视图的确切属性。 :D
    【解决方案2】:

    我个人会选择单一视图选项。这样您就不必重复出现在两个视图中的代码。

    技术上(或关于 MVC 模式)我想不出任何理由将其拆分。

    【讨论】:

    • 我认为拆分它的唯一原因是从视图中删除任何逻辑代码,或者如果您需要将工作拆分给不同的设计师。
    【解决方案3】:

    我倾向于将视图拆分为多个视图,因为理想情况下您希望避免视图中的条件逻辑(阅读:理想情况下)。

    如果您发现这会导致您的视图之间出现一些重复,那么您很可能可以将重复的内容移动到共享部分中。

    【讨论】:

      【解决方案4】:

      我通常会在部分中渲染额外的内容,在渲染之前在部分中使用条件逻辑检查角色:

      <%-- Master Page --%>
      <% Html.RenderPartial("DataOwnerStuff"); %>
      
      <%-- Partial --%>
      <% if(Roles.IsUserInRole("DataOwner")) { %>
          <h1>Hi Data Owner!</h1>
      <% } %>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-16
        • 1970-01-01
        • 2012-02-28
        • 2014-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-27
        相关资源
        最近更新 更多