0

我正忙于按照 Orchard 文档中的教程向用户内容类型添加自定义内容部分。它使用一个视图模型来声明一个用于下拉列表的列表,如下所示:

public IEnumerable<SubscriptionPackageRecord> Packages { get; set; }
...
Packages = _userSubscriptionService.GetPackages() 

GetPackages在哪里IEnumerable<SubscriptionPackageRecord> GetPackages()。然后,在编辑器模板中,他们使用有点笨拙的代码来填充下拉列表:

@Html.DropDownListFor(model => model.PackageId,
                  Model.Packages.Select(s => new SelectListItem {
                      Selected = s.Id == Model.PackageId,
                      Text = s.Name,
                      Value = s.Id
                  }),
                  "Choose a package...")

我希望将模型的 Packages 属性声明为 SelectList 类型,并使用简单的一行调用DropDownListFor,但我怀疑在更接近业务层类(内容部分驱动程序)中创建选择列表的实践是否良好。System.Web.Mvc导入驱动程序类并在那里创建和分配一个SelectList对象会是不好的做法吗?

4

2 回答 2

0

就保持纯业务对象而言,部件已经与 Orchard 相关联,我认为您不会使其变得更加依赖。如果感觉不对,也许只是为这个视图使用一个单独的模型?

于 2012-12-06T16:05:11.503 回答
0

SelectListItem 是一个纯粹与 UI 相关的实体,在视图中创建它是正确的做法。在这里,我们将包的视图模型转换为 DropDownListFor 方法所需的对象。

将 SelectListItems 的创建移到驱动程序中相当于将视图逻辑移到控制器中。它使驱动程序对将如何渲染做出假设。如果您覆盖该形状以使用 HTML 以外的其他技术或一些基于脚本的精美 UI 元素怎么办?如果该列表有多个表示形式怎么办?

于 2012-12-06T18:18:55.563 回答