我应该将System.Web.Mvc导入到Orchard内容部件驱动程序中吗?

时间:2012-12-06 06:44:32

标签: asp.net-mvc asp.net-mvc-4 orchardcms

我正忙着在Orchard文档中关注向 User 内容类型添加自定义内容部分的教程。它使用视图模型声明用于下拉列表的列表,如下所示:

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

其中GetPackagesIEnumerable<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对象是不是不好的做法?

2 个答案:

答案 0 :(得分:0)

零件已经与Orchard联系在一起,因此只要保留一个纯粹的业务对象,我认为你不再依赖它。如果感觉不对,可能只是为这个视图选择一个单独的模型?

答案 1 :(得分:0)

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

将SelectListItems的创建移动到驱动程序中等同于将视图逻辑移动到控制器中。它使驱动程序对如何呈现它进行假设。如果您覆盖该形状以使用除HTML之外的其他技术或某些基于脚本的基本UI元素,该怎么办?如果该列表有多个表示,该怎么办?