1

我有一个视图模型:

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

在 Entity.User User 我有一个方法:

/// Gets the incentive programs that this user is participating in.
public IEnumerable<IncentiveProgram> GetParticipatingIncentivePrograms()
{
  return Node.ParticipatingIncentivePrograms
    .Where(x => x.PublishingState == PublishingState.Live
      && DateTime.UtcNow.Date >= x.DateStart && DateTime.UtcNow.Date <= x.DateEnd);
}

然后我有我的控制器:

   [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 的输出?我的视图中还没有代码。

谢谢

4

1 回答 1

0

恕我直言,您最好在视图模型中表示您的激励计划。事实上有一个 userViewModel 然后可能有一个程序列表。然后将它们加载到您的控制器中

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

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

通常最好不要将整个域图加载到视图中,因为您可能会遇到几个问题(N+1 db 调用、访问关闭的代理等)。我已将您的程序键入为一个简单的名称列表,但您可以将其扩展为字典或查找。再次保持视图模型尽可能轻巧和简单。

更新:

由于您无法更改视图模型,因此看起来您必须设置该值,您目前只是在调用。所以尝试以下

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

如果用户上有这样的集合,或者将它们设置为您的视图模型上的其他内容。

于 2012-11-12T12:39:07.200 回答