2011-07-18 31 views
21

應該將viewmodels限制爲只有屬性,而不是方法?帶有方法的ASP.NET MVC ViewModel - 它是「合法的」嗎?

比方說,我在我的視圖中有一個單選按鈕,並且想要查看是否應該檢查單選按鈕。

我能做到這一點完全是我的觀點:在視圖模型使用這種方法

@Html.RadioButton("radiobuttonName", "The value", Model.IsChecked(id) 

@Html.RadioButton("radiobuttonName", "The value", (id == Model.PersonId)) 

我也可以這樣的邏輯移動到視圖模型

public int PersonId { get;set;} 
    public bool IsChecked(int id) 
    { 
     return (id == PersonId); 
    } 

這是可以做的,還是應該完全在視圖中或以其他方式完成?

+0

練習是 - 如果它讚美的話,那麼是的,它是好的。 BUT可以延伸很長一段時間:)只要它以你所需要的方式去做就可以了。不要擔心太多。 – ppumkin

回答

12

您的ViewModel中可以有方法。如果它是每次計算的單個結果,那麼我會建議將評估代碼添加到Controller並將結果存儲在ViewModel中,但是如果您需要使用更動態的方法評估事物並且Property不能執行此操作這對你來說,然後在ViewModel這樣做可能是好的。

在上面的示例中,我建議在ViewModel中執行此操作,因爲ViewModel包含單個位置的邏輯,而不是多次複製並粘貼到您的View中。

+0

據說在ViewModel中根本不應該存在任何邏輯。這是最好的編碼實踐。但是,通過調用一個函數來讓viewModel在回發中更新其所有屬性是很好的功能。 (業務邏輯是分開的,只有Linq和獲取數據)我意識到,如果你不要在你的視圖中聲明一個屬性WONT發送給客戶端的屬性,那麼。所以它是「受保護的」 - 只要注意什麼以及如何暴露屬性:) – ppumkin

4

這是一個關於正確放置邏輯的非常好的問題。你的做法肯定是合法 - 但它是否遵循MVC的精神? :)

我會說這取決於你的方法的邏輯是否適用於只是這個視圖/視圖模型,或可能有潛在應用到與此基礎模型類型對付其他的ViewModels(在你的情況, )。

如果這是針對此特定ViewModel的一次性計算,請將其保留在模型中。如果此計算一般可用於Person對象,請考慮使用靜態Service類,例如PersonService,並將您的方法放在那裏。

相關問題