首页 文章

与LINQ加入的好友ViewModel

提问于
浏览
0

SOS!我想要实现的是登录人员,查看他或她正在支持的用户(佛教) . 我现在正试图完全接受ViewModels以凝聚视图 . 我使用simplemembership MVC4与Mysql . 我有一个UserProperties(我的用户的所有细节)链接到Userprofile和其他所有工作 . 我通常使用两个数据库一个用于成员资格,另一个用于所有其他东西

楷模

UserProfile / UserProPerties - 扩展到所有其他属性

  • UserId

  • 列出项目

  • 用户名

UserProperty

  • FirstName

  • 姓氏

  • SchoolName

  • UserId

Buddyship

  • buddyId

  • buddiedByUserId

  • buddiedUserId

Viewmodel模型

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>

      }

谢谢,如果你能够提供帮助

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

    改变观点 . 在您的操作中,您只发送一个BuddyViewModel,其中包含UserProperties列表,但不包含BuddyViewModel列表

    @model BudTT.Models.BuddyViewModel
          @foreach (var item in Model.Users) 
          {
            <p>@item.FirstName</p>
            <p>@item.LastName</p>
          }
    

相关问题