【发布时间】:2014-06-20 13:51:05
【问题描述】:
我有一个 asp.net-mvc 网站,到目前为止还没有任何权利,因为它对所有人开放。许多页面都是带有文本框、选择下拉菜单等的详细表单
我现在需要对此进行更改,以使许多现有页面“授权”,以便只有某些人具有编辑能力,而其他人只能看到只读页面。我想知道我是否应该这样做
-
为我现有的视图中的每个人创建一个单独的视图,其中的表单只是页面上的只读 html 并根据服务器端的权利进行重定向,例如
public ActionResult OrderView() { var isEntitled = Model.IsEntitled() if (isEntitled) { return("OrderEditableView", GetViewModel()); } else { return("OrderReadOnlyView", GetViewModel()); }}
或
- 重复使用相同的视图并简单地禁用或隐藏屏幕上的“保存”按钮。
在我看来有
<% if (Model.IsEntitled) { %>
<button id="saveButton">Save Changes</button>
<% } %>
第二个选项实施起来会更快,但会有点奇怪,因为看起来您可以编辑所有字段,但只是看不到(或看到禁用的)表单上的保存按钮。
第一个选项看起来更简洁,但我必须为我的每个屏幕创建一个新视图,这似乎需要大量工作(目前超过 100 个视图)
这似乎是一种常见情况,所以我想看看是否有处理这种情况的最佳做法。显然,鉴于我目前所处的情况,我正在寻找一种解决方案,但如果我从头开始,是否存在被认为是最佳实践或推荐的模式或解决方案,我也会感兴趣。
【问题讨论】:
-
听起来你需要建立一个服务器会话类,你可以在其中放置 MyWeb.Session.isEntitled 之类的东西。
-
@Irb - 我在计算和确定某人是否有资格时没有问题。根据我的问题,我更专注于如何管理视图
-
您可以根据可编辑的要求将视图创建为局部视图..
-
@Irb - 这不是我上面列出的第一个选项吗?
-
有很多模式可以做你想做的事。但是:您是否使用 EditorFor 帮助器来渲染所有要转换为被动控件的输入控件?非管理员用户是否可以看到停用的输入(或者您是否要求他们看到简单的文本)?进行“调整”或使用要更改其行为的自定义助手是否太麻烦?您是否同意从 Angular 等 JS 库中添加一些功能?
标签: asp.net-mvc forms readonly entitlements