2012-04-04 71 views
1

在Orchard链接列表的最佳方式是什么?在Orchard CMS链接列表

例如,我有一个公司名单和一个项目列表。当我创建项目时,我想将其与公司联系起来......理想情况下,一个预先填写了我创建的公司的下拉框。

什么是最好的方式去呢?

P.S.我正在使用果园1.3

非常感谢!

回答

0

要查看在编辑器视图中预填充复选框或删除列表的示例,请查看Orchard文档1-N/N-N示例。

要查看通过droplist设置两个不同部件之间关系的示例,请查看Codeplex或Orchard图库上的FeaturedItemSlider或ContentSlider(源自前者)Orchard模块。

  1. 将ProjectPart更新为具有CompanyPart类型的属性(假设这些是您用于模型的名称)。
  2. 在Migrations.cs中,将ProjectPartRecord表更新为具有int类型的CompanyPartRecord_Id列。 Orchard将用NHibernate建立映射关系,这样ProjectPartRecord表可以连接到CompanyPartRecord表。
  3. 更新ProjectPartDriver类构造函数,使其具有IRepository类型的参数。将实例保存为相同类型的只读类属性(命名为_companiesRepo)。
  4. 更新ProjectPartDriver .Editor()方法以从_companiesRepo中提取公司列表。
  5. 更新另一个ProjectPartDriver .Editor()方法(处理回发的方法),将ProjectPart的CompanyPart属性设置为在下拉列表中选择的公司。您使用下拉列表中的公司Id从db中查找CompanyPart - 我使用viewModels来简化操作,因此我的版本如下所示:projectPart.CompanyPart = _companiesRepo.Get(companyId)
  6. 更新ProjectPart的editorTemplate以呈现droplist。

我不知道你打算如何在前端使用这种关系。有两种方法可以解决这个问题。 (1)您可以创建一个具有匹配Route的自定义控制器,并且在控制器中有代码根据您设置的关系来查找部件,或者(2)在ProjectPartDriver.Display()方法中,您可以执行使用IContentManager进行查找。

+0

啊,我还没有创建一个自定义模块。只需在CMS中创建列表。从视图中手动查询列表的最佳方式是什么?编写自己的SQL查询?有没有一种优雅的方式?我是新的MVC:|谢谢! – NomadTraveler 2012-04-05 00:47:17

+0

有很多方法。您可以使用linq,HQL或纯SQL。如果你正在做一个hacky解决方案,放置查询的最佳位置可能是Display()方法中的Driver类。我相信randompete有一些模块可以让你将内容部分链接在一起而无需编写代码。我没有使用它们,所以我不能给出任何输入。我认为它叫做ScienceProject,或者Mechanics,或者类似的东西。 – 2012-04-05 12:46:22