在Sitecore MVC中的视图呈现和控制器呈现中发布表单

在Sitecore MVC中的视图呈现和控制器呈现中发布表单,sitecore,sitecore-mvc,Sitecore,Sitecore Mvc,我正在阅读一篇关于Sitecore MVC中视图渲染的文章,链接如下: 但我对在视图渲染中发布表单感到困惑。 是否真的可以在视图渲染中发布表单 我认为,在本文中,作者讨论的是中的控制器渲染,从视图渲染部分发布表单。不是吗 还有一个用于控制器渲染的链接: 在此链接中发布表单的逻辑与第一个链接类似 有人能解释一下在视图渲染和控制器渲染中发布表单的区别吗? 什么时候应该使用视图渲染和控制器渲染 非常感谢Martina Welander解释了控制器和视图渲染之间的差异 视图渲染 什么是视图渲染 视图

我正在阅读一篇关于Sitecore MVC中视图渲染的文章,链接如下:

但我对在视图渲染中发布表单感到困惑。 是否真的可以在视图渲染中发布表单

我认为,在本文中,作者讨论的是中的控制器渲染,从视图渲染部分发布表单。不是吗

还有一个用于控制器渲染的链接:

在此链接中发布表单的逻辑与第一个链接类似

有人能解释一下在视图渲染和控制器渲染中发布表单的区别吗? 什么时候应该使用视图渲染和控制器渲染

非常感谢Martina Welander解释了控制器和视图渲染之间的差异

视图渲染

什么是视图渲染

视图渲染由默认情况下采用渲染模型的视图组成。该模型由Sitecore MVC管道组装,您可以创建自己的自定义模型。因为管道需要在模型上使用Initialize()方法,所以可以从RenderingModel继承,也可以实现IRenderingModel

要发布视图渲染,请在组件的定义项上指定要发布到的控制器和操作

专业人士

它们使用起来很简单,特别是在不使用自定义模型的情况下。大多数情况下,您只想显示上下文或数据源项中的一些内容,而不需要任何业务逻辑——一个简单的“页面”通常由标题和一些文本组成,使用Sitecore的RenderingModel和@Html.Sitecore()帮助器可以很容易地做到这一点。这里没有太多的单元测试(您当然可以进行web测试),创建控制器操作似乎是无关的。 当您从视图呈现发布表单时,它将只发布您指定的操作,之后您可以重定向到其他页面或触发Sitecore呈现管道。控制器渲染的情况并非如此,这使得发布表单变得更加困难。 缺点

如果在检索模型时需要执行任何业务逻辑,则需要在单独的层中执行。但是,由于您没有访问控制器的权限,因此您只能在自定义模型的Initialize()方法中执行此逻辑,而将业务逻辑放入模型本身并不理想。 它只是不太像ASP.NETMVC。开发人员习惯于拥有一个控制器和一个动作,而视图渲染不是这样工作的。但是,您必须记住,Sitecore MVC是ASP.NET MVC的一个实现,它需要支持与其Web表单对应项相同的功能。Sitecore页面的模块化特性带来了挑战。 使用

就我个人而言,如果我所做的只是从上下文项或数据源项输出一些数据,或者即使我输出一个项的子项列表,只要不涉及业务逻辑(例如访问权限),我也会使用视图渲染。如果我在做一些需要任何业务逻辑的事情(例如,输出一对滑稽俗气的模糊骰子的降价特价),我会使用控制器渲染

控制器渲染

什么是控制器渲染

控制器渲染的组件定义项指定控制器名称和操作名称,而不是指定视图。将渲染添加到占位符时,将执行此操作并返回视图

专业人士

它们看起来像ASP.NETMVC。您可以像通常一样使用依赖项注入和公共模式(如存储库模式),并创建自己的操作。 将业务逻辑与模型分开;您可以创建由业务逻辑层补充的普通POCO类。 缺点

尽管它们看起来像ASP.NET MVC,但它们仍然是渲染,不会像标准ASP.NET MVC应用程序中的控制器操作那样精确地运行。当您尝试在页面上发布多篇文章或尝试重定向到操作时,这一点尤其明显。 它们是在主视图已经呈现之后执行的,这会导致一些意外行为——同样,当您尝试发布表单时,这可能会导致一些奇怪的行为,并且使用TempData(如果您使用TempData)。 在某些情况下,控制器渲染是大量不必要的工作 使用

就我个人而言,每当我必须执行任何业务逻辑时,我都会使用控制器渲染–我会注入一个域/业务逻辑层,并使用它来构造特定于该渲染的视图模型,该渲染通常是渲染参数和内容的混合体。如果我发布表单,我将尽可能多地使用AJAX,以避免处理表单发布的一些特性

我没有遇到任何证据表明控制器渲染的性能比视图渲染差

总之

因为感觉更像ASP.NET MVC,所以一开始我喜欢控制器渲染,现在每当我唯一的工作纯粹是输出内容时,我就使用视图渲染——而且由于Sitecore是CMS,这种情况经常发生。如果需要一系列业务逻辑代码–控制器渲染。我的规则是尽可能遵循一般的ASP.NET MVC实践:愚蠢的模型、不属于它的业务逻辑、关注点分离等。如果我可以在选择的渲染中遵循这些规则,那可能没问题

还有一篇关于发布控制器渲染的不错的博文,您可以找到: