2013-06-19 43 views
0

我有免费赠送的服务! 我现在已经达到了我有足够的客户,我想为他们提供一个“高级”版本。ASP.Net MVC - 付费设计视图版本

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

建议和样品的欢迎。

回答

0

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

0

这似乎最好是按照每个视图来完成。如果免费视图与高级视图大多数情况下是相同的,那么我会建议在主视图中使用部分视图,检查用于更改显示的成员状态。

如果UI和功能视图有重大区别,那么您可以在控制器内完全交换不同的视图。

2

一个办法是让你的主URL的很简单,简单地让它们呈现基于用户的会员级别孩子的行动。

使用HTML.Action()就可以完全呈现​​了不同的看法,而只是有你的看法是这样的:

@model mymodel 

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

如果你有参数,你可以通过他们。

此外,还要确保您标记那些辅助作用作为儿童操作,使用[ChildActionOnly]所以他们不能单独访问。

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

您也可以使用路由约束根据各种因素(如成员资格级别)路由到不同的控制器操作。

1

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