0

SOS!私が達成しようとしているのは、ログインした人が、サポートしている (仲間になっている) ユーザーを確認することです。私は現在、ViewModels を完全に採用してビューを統合しようとしています。Mysqlでsimplemembership MVC4を使用しています。UserProperties (ユーザーのすべての詳細) が Userprofile にリンクされており、それ以外はすべて機能します。私は通常、メンバーシップ用と他のすべてのもの用に 2 つのデータベースを使用します。

モデル

UserProfile/UserProPerties - 他のすべてのプロパティ用に拡張

  • ユーザーID
  • リスト項目
  • ユーザー名

ユーザー プロパティ

  • ファーストネーム
  • 苗字
  • 学校名
  • ユーザーID

バディシップ

  • 仲間ID
  • buddiedByUserId
  • 仲間のユーザー ID

ビューモデル モデル

 public class BuddyViewModel
  {
      public BuddyShip BuddyShip {get; set;}
      public List<Buddyship> AllBudees {get; set;}
      public UserProperty UserProperty { get; set; }
      public PanelViewModel(Buddyship buddyship, List<Buddyship> allBudees)
      {
            Buddyship = buddyship;
           AllBudees = allBudees;
      }
  }

BuddyViewModel コントローラー

   // I  believe this is where the magic should come from 
   public ActionResult Index(int? id)
   {
         //I get logged in user properties
        var user = db.UserProperties.SingleOrDefault(x => x.UserName == User.Identity.Name);            
        Buddyship allBudees = db1.Buddyships.SingleOrDefault(u =>u.BuddiedByUserId == user.UserId);
        var buds = from u in db.UserProperties
                   join m in db1.Buddyships on u.UserId equals m.BuddiedByUserId
                   where m.BuddiedByUserId == user.UserId
                   select new { u.FirstName, u.LastName, u.SchoolName, u.UserId };

        var buddyviewmodel = new BuddyViewModel(buds //don't know what to put here);

        return View(buddyviewmodel);
    }

意見

      @model IEnumerable<BudTT.Models.BuddyViewModel>
      @foreach (var item in Model.Buddyships) 
      {
        <p>@Html.DisplayFor(model =>model.UserProperty.FirstName)</p>
        <p>@Html.DisplayFor(model =>model.UserProperty.LastName)</p>

      }

お役に立てることがありましたらよろしくお願いいたします

4

1 に答える 1

2

次のようにコードを変更してみてください。

ビューモデル:

public class BuddyViewModel
  {
      public BuddyShip BuddyShip {get; set;}
      public List<Buddyship> AllBudees {get; set;}
      public List<UserProperty> Users { get; set; } //** Add this property
   }

あなたの行動:

    public ActionResult Index(int? id)
       {
             //I get logged in user properties
            var user = db.UserProperties.SingleOrDefault(x => x.UserName == User.Identity.Name);  

///**************Get Buddyships of current user*************************          
            List<Buddyship> allBudees = db1.Buddyships.Where(u =>u.BuddiedByUserId == user.UserId).ToList();

///**************Get Users supporting by user*************************  
            var buds = 
                    (from u in db.UserProperties
                     join m in allBudees on u.UserId equals m.buddiedUserId
                     where m.BuddiedByUserId == user.UserId
                     select new UserProperty
                     {
                      FirstName = u.FirstName, 
                      LastName = u.LastName, 
                      SchoolName = u.SchoolName, 
                      UserId = u.UserId 
                      }).ToList();

            var buddyviewmodel = new BuddyViewModel
            {
              Users = buds,
              AllBudees = allBudees, //** if you really need this property in your View,
              ...
              }

            return View(buddyviewmodel);
        }

ビューを変更します。アクションでは、UserProperties のリストを含む BuddyViewModel を 1 つだけ送信していますが、BuddyViewModels のリストは送信していません。

@model BudTT.Models.BuddyViewModel
      @foreach (var item in Model.Users) 
      {
        <p>@item.FirstName</p>
        <p>@item.LastName</p>
      }
于 2013-08-19T20:28:11.947 に答える