使用ViewModels和对System.Web.Mvc的引用是否违反了MVC模式?

mir*_*zus 6 model-view-controller asp.net-mvc viewmodel asp.net-mvc-2

我已经在SO,博客和书籍上看到了这一点,作者告诉您在模型项目中将ViewModel特定于View作为底层模型对象的包装.我们的想法是,当您对View进行模型绑定时,使其变得非常简单和有针对性.这是一个很好的例子:使用ASP.NET MVC 2 EditorFor渲染和绑定下拉列表

但是,我觉得我的模型中现在有一些对System.Web.Mvc的引用让我感到烦恼,否则本来可以用于多个出口(可能是WCF API,Silverlight等),但是现在我对MVC dll有特定的引用.这将需要我的模型项目来构建.

我的问题是:当我们开始添加IEnumerable<SelectListItem>模型类时,这是否违反了MVC模式?是否有一个可行的替代层来移动它和如何,即控制器?

任何想法或评论赞赏.

Fen*_*ton 6

我个人只在视图中动态创建选择列表,从模型中更易于使用的IEnumerable列表,这意味着我的模型没有任何与SelectLists,SelectListItems或任何MVC特定相关的内容.

承诺的示例 - 使用所有普通视图引擎位在视图中创建SelectList ...

<%= Html.ListBox("SelectedStuff", 
        new SelectList(Model.SomeOptions, "id", "name", Model.SelectedStuff)) %>
Run Code Online (Sandbox Code Playgroud)

  • @Necros - 选择列表的要求只是特定视图的一个问题.控制器不应该关心数据的显示方式.如果视图决定显示数据的超链接列表,或下拉列表,或完全不同的其他内容,则不必在控制器上进行更改.将IEnumerable <SelectListItem>放入控制器的解决方案很脆弱. (2认同)