我有一项目前免费赠送的服务!我现在达到了我有足够的客户想要为他们提供“高级”版本的地步。
因此,一些“高级”功能将包括一些额外的视图文本框。我已经构建了一些自定义属性来处理控制器上的安全性,但是处理视图的最佳方法是什么?我应该创建另一个视图并提供免费的高级视图吗?我应该只有一个视图吗?(如果是这样,我将如何处理仅显示某些文本框\区域)
欢迎提出建议和样品。
我有一项目前免费赠送的服务!我现在达到了我有足够的客户想要为他们提供“高级”版本的地步。
因此,一些“高级”功能将包括一些额外的视图文本框。我已经构建了一些自定义属性来处理控制器上的安全性,但是处理视图的最佳方法是什么?我应该创建另一个视图并提供免费的高级视图吗?我应该只有一个视图吗?(如果是这样,我将如何处理仅显示某些文本框\区域)
欢迎提出建议和样品。
一种选择是使您的主 URL 非常简单,并简单地让它们根据用户的会员级别呈现一个子操作。
使用 HTML.Action() 你可以完全渲染一个不同的视图,并且简单地让你的视图看起来像这样:
@model mymodel
@User.IsInRole("Premium") ?
Html.Action("PremiumView", "MyController") :
Html.Action("NormalView", "MyController")
如果你有参数,你可以传递它们。
此外,请确保将这些子操作标记为子操作,[ChildActionOnly]
这样它们就不能被独立访问。
这样,您可以将免费版本和高级版本完全分开,但保持相同的 URL。
您还可以使用 Route Constraints 根据成员级别等各种因素路由到不同的控制器操作。
您可以创建一个自定义视图引擎,在适用时提供优质内容,然后根据(例如MyView.cshtml
& MyView.Premium.cshtml
)命名您的视图。这使您可以灵活地使用优质内容扩展视图,同时也无需预先承诺进行重大更改。您还需要验证何时以及何时不接受操作中的“高级”更改,但这应该是在您进行处理时进行简单的角色检查。
如果您的视图包含比模型更多的控件,那么您的控制器也不同。您的付费版本的发展速度可能与免费版本不同,因此我建议您将代码分开。
这似乎最好在每次观看的基础上完成。如果免费与高级视图几乎相同,但有一些差异,那么我建议在主视图中使用部分视图检查会员状态以更改显示。
如果 UI 和功能的视图存在重大差异,那么您可能会考虑在控制器内完全换出不同的视图。