ASP.Net MVC - 为Premium(付费)版本设计视图

时间:2013-06-19 15:07:57

标签: asp.net-mvc design-patterns

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

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

欢迎提出建议和样品。

4 个答案:

答案 0 :(得分:2)

一种选择是让您的主网址非常简单,只需让他们根据用户的会员级别呈现子操作。

使用HTML.Action(),您可以完全呈现​​不同的视图,只需让您的视图看起来像这样:

@model mymodel

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

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

此外,请确保使用[ChildActionOnly]将这些子动作标记为子动作,以便无法单独访问它们。

通过这种方式,您可以将免费版和高级版完全分开,但保留相同的网址。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这似乎最好是基于每个视图进行。如果免费视图与高级视图大致相同且存在一些差异,那么我建议在主视图中使用部分视图来检查成员资格状态以更改显示。

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