在 Sitecore MVC 的视图渲染和控制器渲染中发布表单
Posting a form in view rendering and controller rendering in Sitecore MVC
我正在阅读一篇关于 Sitecore MVC 中视图渲染的文章 link:
但我对 post在视图渲染中创建表单感到困惑。
真的可以 post 视图渲染中的表单吗?
我认为在这篇文章中作者在从视图渲染中发布表单section.Isn不是在谈论控制器渲染吗?
控制器渲染还有一个link:
Sitecore MVC controller rendering
在此 link 中为 post 表单解释的逻辑类似于第一个 link?
任何人都可以向我解释 post 在视图渲染和控制器渲染中使用表单的区别吗?
什么时候应该使用视图渲染和控制器渲染?
谢谢
Martina Welander blog 很好地解释了控制器和视图渲染之间的差异。
查看效果图
什么是视图渲染?
视图渲染由默认采用 RenderingModel 的视图组成。该模型由 Sitecore MVC 管道组装而成,您可以创建自己的自定义模型。因为管道需要模型上的 Initialize() 方法,所以您可以继承 RenderingModel 或实现 IRenderingModel。
要 post 视图渲染,指定要 post 到组件定义项上的控制器和操作。
优点
它们易于使用——尤其是在您不使用自定义模型的情况下。大多数时候,您只想显示上下文或数据源项目中的一些内容,而不需要任何业务逻辑——一个简单的“页面”通常包含一个标题和一些文本,您可以使用 Sitecore 的 RenderingModel 和@Html.Sitecore() 助手。这里没有太多的单元测试(你当然可以做网络测试),创建一个控制器动作似乎无关紧要。
当您 post 从视图渲染表单时,它只会 post 您指定的操作 – 之后您可以重定向到另一个页面或触发 Sitecore 渲染管道。这不是控制器渲染的情况,这使得 posting 表单有点困难。
缺点
如果在检索模型时需要执行任何业务逻辑,则需要在单独的层中执行。但是,由于您无权访问控制器,因此您唯一可以执行此逻辑的地方是在自定义模型的 Initialize() 方法中——将业务逻辑放在模型本身中并不理想。
它只是不太 ASP.NET MVC。开发人员习惯于拥有一个控制器和一个动作,而视图渲染并不是那样工作的。但是,您必须记住,Sitecore MVC 是 ASP.NET MVC 的一个实现,它需要支持与其对应的 Web 窗体相同的功能。 Sitecore 页面的模块化特性带来了挑战。
使用
就我个人而言,如果我所做的只是从上下文项或数据源项输出一些数据,或者即使我正在输出一个项目的 children 列表,我也会使用视图渲染,只要因为不涉及业务逻辑(例如访问权限)。如果我做的事情完全需要任何业务逻辑(例如,输出一对滑稽俗气的模糊骰子的降价特价),我会使用控制器渲染。
手柄效果图
什么是控制器渲染?
控制器渲染的组件定义项不是指定视图,而是指定控制器名称和动作名称。当渲染添加到占位符时,执行此操作并返回视图。
优点
他们看起来 ASP.NET MVC。您可以像往常一样使用依赖注入和通用模式(如存储库模式),并创建您自己的操作。
将您的业务逻辑与您的模型分开;您可以创建普通的 POCO 类,它们由业务逻辑层混合。
缺点
虽然它们看起来 ASP.NET MVC,但它们仍然是渲染,并且不会完全像标准 ASP.NET MVC 应用程序中的控制器操作那样运行。当您尝试在页面上有多个 post 或尝试 RedirectToAction 时,这一点尤其明显。
它们在主视图已经呈现后执行,这会导致一些意外行为——同样,当您尝试 post 表单和使用 TempData(如果您使用它)时,这可能会导致一些奇怪的行为。
在某些情况下,控制器渲染是很多不必要的工作
使用
就个人而言,每当我必须执行任何业务逻辑时,我都会使用控制器渲染 – 我注入一个域/业务逻辑层并使用它来构建特定于该渲染的视图模型,这通常是渲染参数和内容。如果我正在 posting 一个表格,我会尽可能地使用 AJAX 以避免不得不处理一些 posting 表格的特殊性。
我没有发现任何证据表明控制器渲染的性能比视图渲染差。
总结
一开始就喜欢控制器渲染,因为它们感觉更 ASP.NET MVC,现在只要我唯一的工作纯粹是输出内容,我就会使用视图渲染——而且由于 Sitecore 是一个 CMS,这种情况经常发生很多。如果需要一行业务逻辑代码——控制器渲染。我的规则是尽可能遵循一般的 ASP.NET MVC 实践:愚蠢的模型,没有不属于它的业务逻辑,关注点分离等。如果我可以在我选择的渲染中遵循这些规则,它可能是很好。
也是一个不错的blg post 关于 posting 控制器渲染你可以找到 here :
我正在阅读一篇关于 Sitecore MVC 中视图渲染的文章 link:
但我对 post在视图渲染中创建表单感到困惑。 真的可以 post 视图渲染中的表单吗?
我认为在这篇文章中作者在从视图渲染中发布表单section.Isn不是在谈论控制器渲染吗?
控制器渲染还有一个link:
Sitecore MVC controller rendering
在此 link 中为 post 表单解释的逻辑类似于第一个 link?
任何人都可以向我解释 post 在视图渲染和控制器渲染中使用表单的区别吗? 什么时候应该使用视图渲染和控制器渲染?
谢谢
Martina Welander blog 很好地解释了控制器和视图渲染之间的差异。
查看效果图
什么是视图渲染?
视图渲染由默认采用 RenderingModel 的视图组成。该模型由 Sitecore MVC 管道组装而成,您可以创建自己的自定义模型。因为管道需要模型上的 Initialize() 方法,所以您可以继承 RenderingModel 或实现 IRenderingModel。
要 post 视图渲染,指定要 post 到组件定义项上的控制器和操作。
优点
它们易于使用——尤其是在您不使用自定义模型的情况下。大多数时候,您只想显示上下文或数据源项目中的一些内容,而不需要任何业务逻辑——一个简单的“页面”通常包含一个标题和一些文本,您可以使用 Sitecore 的 RenderingModel 和@Html.Sitecore() 助手。这里没有太多的单元测试(你当然可以做网络测试),创建一个控制器动作似乎无关紧要。 当您 post 从视图渲染表单时,它只会 post 您指定的操作 – 之后您可以重定向到另一个页面或触发 Sitecore 渲染管道。这不是控制器渲染的情况,这使得 posting 表单有点困难。 缺点
如果在检索模型时需要执行任何业务逻辑,则需要在单独的层中执行。但是,由于您无权访问控制器,因此您唯一可以执行此逻辑的地方是在自定义模型的 Initialize() 方法中——将业务逻辑放在模型本身中并不理想。 它只是不太 ASP.NET MVC。开发人员习惯于拥有一个控制器和一个动作,而视图渲染并不是那样工作的。但是,您必须记住,Sitecore MVC 是 ASP.NET MVC 的一个实现,它需要支持与其对应的 Web 窗体相同的功能。 Sitecore 页面的模块化特性带来了挑战。 使用
就我个人而言,如果我所做的只是从上下文项或数据源项输出一些数据,或者即使我正在输出一个项目的 children 列表,我也会使用视图渲染,只要因为不涉及业务逻辑(例如访问权限)。如果我做的事情完全需要任何业务逻辑(例如,输出一对滑稽俗气的模糊骰子的降价特价),我会使用控制器渲染。
手柄效果图
什么是控制器渲染?
控制器渲染的组件定义项不是指定视图,而是指定控制器名称和动作名称。当渲染添加到占位符时,执行此操作并返回视图。
优点
他们看起来 ASP.NET MVC。您可以像往常一样使用依赖注入和通用模式(如存储库模式),并创建您自己的操作。 将您的业务逻辑与您的模型分开;您可以创建普通的 POCO 类,它们由业务逻辑层混合。 缺点
虽然它们看起来 ASP.NET MVC,但它们仍然是渲染,并且不会完全像标准 ASP.NET MVC 应用程序中的控制器操作那样运行。当您尝试在页面上有多个 post 或尝试 RedirectToAction 时,这一点尤其明显。 它们在主视图已经呈现后执行,这会导致一些意外行为——同样,当您尝试 post 表单和使用 TempData(如果您使用它)时,这可能会导致一些奇怪的行为。 在某些情况下,控制器渲染是很多不必要的工作 使用
就个人而言,每当我必须执行任何业务逻辑时,我都会使用控制器渲染 – 我注入一个域/业务逻辑层并使用它来构建特定于该渲染的视图模型,这通常是渲染参数和内容。如果我正在 posting 一个表格,我会尽可能地使用 AJAX 以避免不得不处理一些 posting 表格的特殊性。
我没有发现任何证据表明控制器渲染的性能比视图渲染差。
总结
一开始就喜欢控制器渲染,因为它们感觉更 ASP.NET MVC,现在只要我唯一的工作纯粹是输出内容,我就会使用视图渲染——而且由于 Sitecore 是一个 CMS,这种情况经常发生很多。如果需要一行业务逻辑代码——控制器渲染。我的规则是尽可能遵循一般的 ASP.NET MVC 实践:愚蠢的模型,没有不属于它的业务逻辑,关注点分离等。如果我可以在我选择的渲染中遵循这些规则,它可能是很好。
也是一个不错的blg post 关于 posting 控制器渲染你可以找到 here :