2012-11-12 38 views
1

我有一個視圖模型:如何訪問ViewModel中的方法?

public class ManageUserViewModel 
{ 
    public Entities.User User { get; set; } 
    public bool IsLockedOut { get; set; } 
    public bool IsActivated { get; set; } 
    public bool IsArchived { get; set; } 
} 
在Entities.User用戶

我有一個方法:

然後我有我的控制器:

[HttpGet] 
public ActionResult UserDetails(int id) 
{ 
    var user = ZincService.GetUserForId(id); 
    if (user == null || user.Customer.CustomerId != CurrentCustomer.CustomerId) 
    return DataNotFound(); 

    ManageUserViewModel viewModel = new ManageUserViewModel(); 
    viewModel.User = user; 
    viewModel.IsLockedOut = MembershipService.IsUserLocked(user.Email); 
    viewModel.IsActivated = user.DateTimeActivated.HasValue && MembershipService.IsUserApproved(user.Email); 
    viewModel.IsArchived = user.IsArchived; 
    viewModel.User.GetParticipatingIncentivePrograms(); 
    return View(viewModel); 
} 

如何獲得輸出GetParticipatingIncentivePrograms在我看來的? 我沒看到代碼。

謝謝

回答

0

Imho,你最好在你的視圖模型中代表你的激勵計劃。實際上有一個userViewModel,然後可能有一個列表中的程序。然後,控制器

ManageUserViewModel{ 
    public UserViewModel User { get; set; } 
} 

UserViewModel { 
    public List<string> ParticipatingIncentivePrograms { get; set; } 
} 

內加載這些它通常是最好的全域圖沒有加載到一個視圖,你可以遇到許多問題(N + 1個調用數據庫,訪問一個封閉的代理等)。我已經將程序輸入爲簡單的名稱列表,但可以將其擴展爲字典或查找。再次保持視圖模型儘可能簡單和簡單。

UPDATE:

正如你不能改變視圖模型那麼它看起來像你必須設置的值,則目前只有調用。因此,嘗試以下

viewModel.User.ParticipatingIncentivePrograms = 
     viewModel.User.GetParticipatingIncentivePrograms(); 

如果有用戶這樣一個集合或將它們設置爲你的視圖模型別的東西。

+0

我怕這段代碼是由別人寫的,我不能改變這個架構,我必須繼續我的所得:) –