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; }
}

Entities.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 に答える