在asp.net MVC视图中使用object方法

时间:2011-05-24 14:31:06

标签: asp.net-mvc view extension-methods

一两个月前,当我开始做asp.net MVC工作时,我记得读过不建议在视图中调用以下对象方法:

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

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

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

提前致谢!

1 个答案:

答案 0 :(得分:0)

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