2011-05-24 69 views
0

一兩個月前,當我開始做asp.net MVC的工作,我記得讀它,不建議調用對象的方法,例如在視圖:使用對象方法

<%: Html.ListBoxFor(m => Model.SelectedId, Model.SelectItems.ToSelectList()) %> 

上面只是一個例子,而不是我使用的直接代碼。我正在使用擴展方法將我的枚舉變成ListBox綁定就緒的IEnumerable集合。我知道有人擔心有人曾在文章中提過這件事,但我不記得那是什麼。我實際上並沒有編碼它,但我現在這樣做正在成爲一種負擔。我正在編寫擴展方法將所有IEnumerable對象轉換爲SelectListItem集合,現在又轉換爲MultiSelectList對象。因此,我的視圖模型正在以顯示數據的「潛在」方式變得臃腫。我正在追蹤4個新的數據:SelectListItem集合,SelectListValue對象,MultiSelectList控件,MultiSelectListValues集合,而不僅僅是可用選項的可枚舉。

我不反對繼續這樣做,但我想記住爲什麼建議不要在視圖上調用擴展方法,如果我使用強類型的完整/部分視圖。我試圖找到那篇文章和其他人喜歡它,但我不能。我希望我的記憶力比這更好,但希望有人知道這一點,並願意與我分享!

提前致謝!

回答

0

您所談論的想法是基於MVC中的視圖應該儘可能簡單的原則。因爲這是最難測試的不必要的臃腫應該避免。 您的示例行可以通過幾種不同的方式進行配對。您可以嘗試編寫一個擴展,該擴展從您的模型中獲取枚舉並將其轉換爲可以輸入到列表框中的選擇列表,或者可以更改模型的屬性以返回枚舉列表項。後者是我的首選方法。該模型用於組織要由視圖使用的數據,因此沒有理由讓它輸出視圖無法直接使用的數據。這些方法中的任何一個都會使視圖變得複雜,並將其放置在更易於進行單元測試的地方。 希望這有助於。

+0

我有一種感覺,這只是一個「哲學」的理由,但我不記得了。我目前在控制器中處理所有這些數據,並在模型中爲可能需要的每種方法創建新條目。我有一個擴展方法來轉換的枚舉,我打電話,而填充模型之前發送到任何地方。因爲在視圖中調用擴展名似乎比較容易,所以我想記住爲什麼我的大腦不停地向我大喊不要這麼做。感謝您的提醒!太快太快......難以保持有時哈哈。 – SenseiHitokiri 2011-05-24 18:05:22

+0

很高興能幫到你! – Jay 2011-05-24 18:31:37