Orchardcms 在Orchard控制器中自动填充零件值

Orchardcms 在Orchard控制器中自动填充零件值,orchardcms,orchardcms-1.6,Orchardcms,Orchardcms 1.6,我对Orchard(和ASP.NET MVC)非常陌生,我很难理解如何在控制器中自动设置Orchard零件属性。我有一个“画廊”内容类型,由股票标题、容器和所有者部分组成。我正在使用一个Create方法创建一个控制器,该方法隐藏容器部分的所有细节,因为我将在Create方法的HttpPost版本中设置默认页面长度、项目类型等。我的问题是我不知道如何在HTTPPOST上设置这些值 我的总体计划如下: 我创建了一个CreateGalleryViewModel,其中包含标题和管理员用户名,两者都是字符

我对Orchard(和ASP.NET MVC)非常陌生,我很难理解如何在控制器中自动设置Orchard零件属性。我有一个“画廊”内容类型,由股票标题、容器和所有者部分组成。我正在使用一个Create方法创建一个控制器,该方法隐藏容器部分的所有细节,因为我将在Create方法的HttpPost版本中设置默认页面长度、项目类型等。我的问题是我不知道如何在HTTPPOST上设置这些值

我的总体计划如下:

我创建了一个CreateGalleryViewModel,其中包含标题和管理员用户名,两者都是字符串。在视图中,这两个字段表示为表单字段。在提交时,我可以在控制器中运行TryUpdateModel,用表单值更新CreateGalleryViewModel。但是如何更新零件属性呢?我想我应该运行IContentManager.UpdateEditor(,this),但我认为这个ca不起作用,因为我一开始从未运行过IContentManager.BuildEditor。这就是我被卡住的地方,因为我看不到内容部分如何得到正确的验证和更新


我是否在错误的抽象层次上看待这个问题?如何为我的图库内容类型创建简化编辑器?

这里您基本需要了解以下内容:

  • 可以使用IContentManager.BuildEditor()构建内容项的编辑器
  • 您可以使用IContentManager.UpdateEditor()从POST数据更新项的部分值
  • 您还可以通过使用As()方法“强制转换”内容项来访问部件(需要Orchard.ContentManagement命名空间)
  • 由于内容项的动态特性,在处理它们时,创建视图模型(在其中重新创建部分属性)很少是一种好方法。如果您对内容项中包含的内容有这样的静态视图模型,那么您将错过Orchard的内容模型所带来的可扩展性和灵活性。例如,如果由于使用静态视图模型而向该内容类型添加新零件,则不会处理新零件

有关如何从代码管理内容项的完整示例,请参见。

这里您基本需要了解的是:

  • 可以使用IContentManager.BuildEditor()构建内容项的编辑器
  • 您可以使用IContentManager.UpdateEditor()从POST数据更新项的部分值
  • 您还可以通过使用As()方法“强制转换”内容项来访问部件(需要Orchard.ContentManagement命名空间)
  • 由于内容项的动态特性,在处理它们时,创建视图模型(在其中重新创建部分属性)很少是一种好方法。如果您对内容项中包含的内容有这样的静态视图模型,那么您将错过Orchard的内容模型所带来的可扩展性和灵活性。例如,如果由于使用静态视图模型而向该内容类型添加新零件,则不会处理新零件

有关如何从代码管理内容项的完整示例,请参阅。

您提到您没有使用
BuildEditor
创建表单。我可以问一下您为什么不使用
BuildEditor
,您使用了哪种方法?@BehnamEsmaili-我这样做的原因是
BuildEditor
将创建一个包含所有部件和表单字段的表单,包括我不想要的部件和表单字段,例如容器的项目类型等。不过,我对另一种方法持开放态度。请发布
CreateGalleryViewModel
部件的代码(或属性)您要更新和
ContentType
定义
Gallery
(包括零件)。您提到您没有使用
BuildEditor
创建表单。我可以问一下您为什么没有使用
BuildEditor
,以及您使用了哪种方法吗?@behnamemaili-我这样做的原因是
BuildEditor
将创建一个包含所有部分和表单字段的表单,包括我不想要的部分和表单字段,例如contaInner的项目类型等。不过我对另一种方式持开放态度。请发布您要更新的
CreateGalleryViewModel
零件(或属性)的代码,以及
ContentType
Gallery
的定义(包括零件)。我想我理解创建编辑器的过程。在本例中我没有这样做的原因是因为我只希望用户编辑特定属性(并且只能看到相应的表单字段),而其余的则未设置或设置为我选择的默认值。我不知道如何才能做到这一点。您可以使用所提到的As()使用只包含这些属性的静态视图模型方法,但最好按照我所描述的做,并隐藏您不想通过放置或为特定编辑器定义替代项来显示的内容。在您描述了这一点之后,我终于看到了曙光,这对我来说是有意义的。感谢您重申。我想我理解创建编辑器的过程。我没有这样做的原因在这种情况下,是因为我只希望用户编辑特定的属性(并且只能看到相应的表单字段),而其余的属性是未设置的或设置为我选择的默认值。我不知道如何才能做到这一点。您可以使用前面提到的As()使用静态视图模型,只包含这些属性方法,但最好按照我所描述的做,并隐藏您不希望通过放置或为特定编辑器定义替代项来显示的内容。在您描述了这一点之后,我终于看到了曙光,这对我来说是有意义的。感谢您再次重申。