2011-05-24 70 views
0

一两个月前,当我开始做asp.net MVC的工作,我记得读它,不建议调用对象的方法,例如在视图:使用对象方法

<%: Html.ListBoxFor(m => Model.SelectedId, Model.SelectItems.ToSelectList()) %> 

上面只是一个例子,而不是我使用的直接代码。我正在使用扩展方法将我的枚举变成ListBox绑定就绪的IEnumerable集合。我知道有人担心有人曾在文章中提过这件事,但我不记得那是什么。我实际上并没有编码它,但我现在这样做正在成为一种负担。我正在编写扩展方法将所有IEnumerable对象转换为SelectListItem集合,现在又转换为MultiSelectList对象。因此,我的视图模型正在以显示数据的“潜在”方式变得臃肿。我正在追踪4个新的数据:SelectListItem集合,SelectListValue对象,MultiSelectList控件,MultiSelectListValues集合,而不仅仅是可用选项的可枚举。

我不反对继续这样做,但我想记住为什么建议不要在视图上调用扩展方法,如果我使用强类型的完整/部分视图。我试图找到那篇文章和其他人喜欢它,但我不能。我希望我的记忆力比这更好,但希望有人知道这一点,并愿意与我分享!

提前致谢!

回答

0

您所谈论的想法是基于MVC中的视图应该尽可能简单的原则。因为这是最难测试的不必要的臃肿应该避免。 您的示例行可以通过几种不同的方式进行配对。您可以尝试编写一个扩展,该扩展从您的模型中获取枚举并将其转换为可以输入到列表框中的选择列表,或者可以更改模型的属性以返回枚举列表项。后者是我的首选方法。该模型用于组织要由视图使用的数据,因此没有理由让它输出视图无法直接使用的数据。这些方法中的任何一个都会使视图变得复杂,并将其放置在更易于进行单元测试的地方。 希望这有助于。

+0

我有一种感觉,这只是一个“哲学”的理由,但我不记得了。我目前在控制器中处理所有这些数据,并在模型中为可能需要的每种方法创建新条目。我有一个扩展方法来转换的枚举,我打电话,而填充模型之前发送到任何地方。因为在视图中调用扩展名似乎比较容易,所以我想记住为什么我的大脑不停地向我大喊不要这么做。感谢您的提醒!太快太快......难以保持有时哈哈。 – SenseiHitokiri 2011-05-24 18:05:22

+0

很高兴能帮到你! – Jay 2011-05-24 18:31:37