2010-09-19 92 views
4

我觉得我的问题已经接近这个问题了,但是我想要一个更一般的讨论,讨论这样的代码应该放在哪里。 Asp.Net MVC SelectList Refactoring Question?selectlist逻辑应该放在ASP.NET MVC,视图,模型还是控制器中?

我目前直接在我的实体模型上创建我的选择列表,就像这样。

public SelectList taskDeadlineTime 
    { 
     get { return new SelectList(TimeDictionary, "Value", "Key", this.getDeadlineTime()); } 
    } 

这感觉有点不对,就好像我在模型中执行视图工作一样。

但是,这意味着我可以获得财产,我的选择列表就在那里。现在,我应该把这个逻辑放在我的控制器(更多的代码写入)或视图(感觉错误,混乱),或者只是以不同的方式做。

我现在看这个的原因是因为我正在比较同一对象实体的两个副本,并且将选择列表作为getter的一部分直接表示它不起作用。我知道我可以修改这个比较来处理这个问题,但是在模型中做一些可视化的事情感觉不对(除非选择列表的准备工作在模型中是正确的)

回答

7

我通常会把这个风景。

视图模型:

public IEnumerable<Foo> TaskDeadlineTimes { get; set; } 

查看:

<%= Html.DropDownListFor(
    x => x.SelectedValue, 
    new SelectList(Model.TaskDeadlineTimes, "Value", "Key") 
) %> 

而控制器负责设置使用一个仓库此属性值的照顾。

+0

这在很多方面都有意义,因为您也可以将选定值设置为视图中的第四个参数。但是,如果你只是提供选择列表到视图,摆脱未使用的属性的开销,它会不会更快? – bnu 2017-10-18 09:41:45

0

我们还有一个叫做Builders的图层。

控制器创建构建器并将必要的信息传递给它。

构建器与上下文(当前用户,他的角色等)+数据层进行交互,并使用所有有效数据生成模型。

比控制器将此模型传递给View。

+0

我做了类似的事情,除了我在操作筛选器级别获得了构建器而不是服务/控制器级别。控制器可以返回具有属性和空值的视图模型,并激活适当的构建器以填充缺失的数据。 – Ryan 2010-09-19 18:44:03

相关问题