我觉得我的问题与这个问题很接近,但是我想要更一般地讨论这样的代码应该放在哪里。 Asp.Net MVC SelectList Refactoring Question?
我目前直接在我的实体模型上创建我的选择列表,就像这样。
public SelectList taskDeadlineTime
{
get { return new SelectList(TimeDictionary, "Value", "Key", this.getDeadlineTime()); }
}
这感觉有点不对,好像我在我的模型中进行查看工作。
然而,这确实意味着我可以获得该属性,我的选择列表就在那里。
现在,我应该将这个逻辑放在我的控制器中(更多代码要编写)或查看(感觉错误和杂乱)或只是以不同的方式进行。
我现在看这个的原因是因为我正在比较同一对象实体的两个副本,并且将选择列表作为getter的一部分直接意味着它不起作用。我知道我可以修改这个比较来处理这个问题,但是在模型中做一些可视化的东西感觉不对(除非准备选择列表是模型中正确的东西)
答案 0 :(得分:7)
我通常把它放到视图中。
视图模型:
public IEnumerable<Foo> TaskDeadlineTimes { get; set; }
查看:
<%= Html.DropDownListFor(
x => x.SelectedValue,
new SelectList(Model.TaskDeadlineTimes, "Value", "Key")
) %>
控制器负责使用存储库设置此属性值。
答案 1 :(得分:0)
我们有另外一个叫做建设者的层。
Controller创建构建器并将必要的信息传递给它。
Builder与上下文(当前用户,他的角色等)+数据层交互,并生成包含所有有效数据的模型。
比控制器将此模型传递给View。