Asp.net mvc 在asp.net MVC视图中使用对象方法

Asp.net mvc 在asp.net MVC视图中使用对象方法,asp.net-mvc,view,extension-methods,Asp.net Mvc,View,Extension Methods,一两个月前,当我开始做asp.net MVC工作时,我记得读到不建议在视图中调用如下对象方法: <%: Html.ListBoxFor( m => Model.SelectedId, Model.SelectItems.ToSelectList() ) %> Model.SelectedId,Model.SelectItems.ToSelectList())%%> 以上只是一个示例,不是我正在使用的直接代码行。我正在使用扩展方法将我的可枚举项转换为ListBox绑定就绪的I

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

<%: Html.ListBoxFor( m => Model.SelectedId, Model.SelectItems.ToSelectList() ) %>
Model.SelectedId,Model.SelectItems.ToSelectList())%%>
以上只是一个示例,不是我正在使用的直接代码行。我正在使用扩展方法将我的可枚举项转换为ListBox绑定就绪的IEnumerable集合。我知道有人在一篇文章中对此表示担忧,但我记不起是什么了。我现在并不是真的在编码,但我的编码方式正在成为一种负担。我正在编写扩展方法,将所有IEnumerable对象转换为SelectListItem集合,现在转换为MultiSelectList对象。因此,我的视图模型正变得臃肿,充斥着显示数据的“潜在”方式。我正在跟踪4条新数据:SelectListItem集合、SelectListValue对象、MultiSelectList控件、MultiSelectListValues集合,而不仅仅是可枚举的可用选项

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


提前谢谢

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

我觉得这只是一个“哲学”原因,但我记不起来了。我目前正在控制器中处理这一切,并为可能需要的每个方法在模型中创建新条目。我有一个扩展方法来转换可枚举项,我在将其发送到任何地方之前填充模型时调用它。因为在视图中调用分机似乎比较容易,所以我想记住为什么我的大脑一直对我大喊大叫,不让我这么做。谢谢你的提醒!太多太快。。。有时候很难把事情搞清楚,哈哈。