0

我有一项目前免费赠送的服务!我现在达到了我有足够的客户想要为他们提供“高级”版本的地步。

因此,一些“高级”功能将包括一些额外的视图文本框。我已经构建了一些自定义属性来处理控制器上的安全性,但是处理视图的最佳方法是什么?我应该创建另一个视图并提供免费的高级视图吗?我应该只有一个视图吗?(如果是这样,我将如何处理仅显示某些文本框\区域)

欢迎提出建议和样品。

4

4 回答 4

2

一种选择是使您的主 URL 非常简单,并简单地让它们根据用户的会员级别呈现一个子操作。

使用 HTML.Action() 你可以完全渲染一个不同的视图,并且简单地让你的视图看起来像这样:

@model mymodel

@User.IsInRole("Premium") ? 
    Html.Action("PremiumView", "MyController") : 
    Html.Action("NormalView", "MyController")

如果你有参数,你可以传递它们。

此外,请确保将这些子操作标记为子操作,[ChildActionOnly]这样它们就不能被独立访问。

这样,您可以将免费版本和高级版本完全分开,但保持相同的 URL。

您还可以使用 Route Constraints 根据成员级别等各种因素路由到不同的控制器操作。

于 2013-06-19T15:30:33.653 回答
1

您可以创建一个自定义视图引擎,在适用时提供优质内容,然后根据(例如MyView.cshtml& MyView.Premium.cshtml)命名您的视图。这使您可以灵活地使用优质内容扩展视图,同时也无需预先承诺进行重大更改。您还需要验证何时以及何时不接受操作中的“高级”更改,但这应该是在您进行处理时进行简单的角色检查。

于 2013-06-19T15:35:31.970 回答
0

如果您的视图包含比模型更多的控件,那么您的控制器也不同。您的付费版本的发展速度可能与免费版本不同,因此我建议您将代码分开。

于 2013-06-19T15:12:52.970 回答
0

这似乎最好在每次观看的基础上完成。如果免费与高级视图几乎相同,但有一些差异,那么我建议在主视图中使用部分视图检查会员状态以更改显示。

如果 UI 和功能的视图存在重大差异,那么您可能会考虑在控制器内完全换出不同的视图。

于 2013-06-19T15:13:20.047 回答