【问题标题】:Autofilling Part Values in an Orchard Controller在 Orchard 控制器中自动填充部件值
【发布时间】:2013-06-27 03:11:13
【问题描述】:

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

我的总体计划如下:

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

我是否在错误的抽象级别上看待这个?如何为我的图库内容类型制作简化的编辑器?

【问题讨论】:

  • 您提到您没有使用BuildEditor 创建表单。请问您为什么不使用BuildEditor ,您使用的是哪种方法?
  • @BehnamEsmaili - 我这样做的原因是因为BuildEditor 会创建一个包含所有部分和表单字段的表单,包括我不想要的那些,例如容器的项目类型等. 不过我对不同的方式持开放态度。
  • 请为您想要更新的CreateGalleryViewModel 部分(或属性)和ContentType 定义Gallery(包括部分)提供代码。

标签: orchardcms orchardcms-1.6


【解决方案1】:

这里你基本上需要知道的是:

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

有关如何通过代码管理内容项的完整示例,请参阅Training Demo module

【讨论】:

  • 我想了解创建编辑器的过程。在这种情况下我没有这样做的原因是因为我只希望用户编辑特定的属性(并且只能看到相应的表单字段),而其余的未设置或设置为我选择的默认值。我不知道我该怎么做。
  • 你可以使用上面提到的 As() 方法来获得具有这些属性的静态视图模型,但最好按照我的描述进行并隐藏你不做的事情'不想使用 Placement 或通过为该特定编辑器定义替代项来显示。
  • 在你描述了这一点之后,我终于看到了曙光,这对我来说是有意义的。感谢您重申。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-25
  • 1970-01-01
  • 2012-03-03
相关资源
最近更新 更多