MVC 视图 | *YOU* 如何处理 IsAuthenticated 场景?

Posted

技术标签:

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

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

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

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

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

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

【问题讨论】:

【参考方案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>
<%  %>

【讨论】:

以上是关于MVC 视图 | *YOU* 如何处理 IsAuthenticated 场景?的主要内容,如果未能解决你的问题,请参考以下文章

您如何处理仅使用 EF4 plus Repository Pattern 显示视图的应用程序?

在 Spring MVC 中如何处理 Ajax 请求?

spring mvc 异常如何处理

如何处理动态IP地址mvc 4

如何处理 .net MVC Core 中的动态错误页面?

下载JDK的时候提示you must accept the license agreement before downloading,如何处理??