2010-09-19 87 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

相關問題