2013-12-21 31 views
1

我想为用户索引构建一个可枚举的ViewModel,但是当我构建项目时,我无法通过ViewModel枚举。有人可以帮我弄清楚如何正确构建我的ViewModel?如何构建MVC的可枚举视图模型?

我UserProfileIndexViewModel

public class UserProfileIndexViewModel 
{ 
    public List<int> UserId { get; set; } 
    public List<string> UserName { get; set; } 
    public List<string> FirstName { get; set; } 
    public List<string> LastName { get; set; } 
    public List<string> Email { get; set; } 
    public List<string> ClientName { get; set; } 
} 

我的控制器

public ActionResult Index() 
{ 
    var viewModel = new UserProfileIndexViewModel(); 
    var users = db.UserProfiles; 

    foreach (var user in users) 
    { 
     viewModel.UserId.Add(user.UserId); 
     ProfileBase _userProfile = ProfileBase.Create(user.UserName); 
     viewModel.FirstName.Add(Convert.ToString(_userProfile.GetPropertyValue("FirstName"))); 
     viewModel.LastName.Add(Convert.ToString(_userProfile.GetPropertyValue("LastName"))); 
     viewModel.Email.Add(db.User_Contacts.Find(user.UserName).Contact.Email); 
     viewModel.ClientName.Add(db.User_Clients.Find(user.UserName).Client.Name); 
    } 
    return View(viewModel); 
} 

我的索引

@model IEnumerable<project.ViewModels.UserProfileIndexViewModel> 
@{ 
    ViewBag.Title = "Index"; 
} 
<p>@Html.ActionLink("Create New", "Create")</p> 
<table class="table table-condensed"> 
    <tr> 
     <th>@Html.ActionLink("Create", "Create", "User")</th> 
     <th>Username</th> 
     <th>First Name</th> 
     <th>Last Name</th> 
     <th>Email</th> 
     <th>Client</th> 
    </tr> 
@foreach (var item in Model) { 
    <tr> 
     <td> 
      <a href="Details/@item.UserId" title="Details">Details</a> 
      <a href="Edit/@item.UserId" title="Edit">Edit</a> 
      <a href="Delete/@item.UserId" title="Delete">Delete</a> 
     </td> 
     <td>@item.UserName</td> 
     <td>@item.FirstName</td> 
     <td>@item.LastName</td> 
     <td>@item.Email</td> 
     <td>@item.ClientName</td> 
    </tr> 
} 
</table> 
+0

为什么所有属性都是一个集合..? –

+0

因为我不知道我在做什么。 – CIA

+0

@CIA哈以及至少你的诚实:) –

回答

3

每个用户配置文件包含一个用户ID,用户名,名字,等等这样的模式应该是这样的:

public class UserProfileIndexViewModel 
{ 
    public int UserId { get; set; } 
    public string UserName { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Email { get; set; } 
    public string ClientName { get; set; } 
} 

而且你的控制器动作应该是这样的:

var users = db.UserProfiles; 
var viewModel = new List<UserProfileIndexViewModel>(); 
foreach (var user in users) 
{ 
    ProfileBase _userProfile = ProfileBase.Create(user.UserName); 
    viewModel.Add(new UserProfileIndexViewModel { 
     UserId = user.UserId, 
     FirstName = Convert.ToString(_userProfile.GetPropertyValue("FirstName")), 
     LastName = Convert.ToString(_userProfile.GetPropertyValue("LastName")), 
     Email = db.User_Contacts.Find(user.UserName).Contact.Email, 
     ClientName = db.User_Clients.Find(user.UserName).Client.Name 
    }); 
} 
return View(viewModel); 

然后你的观点应该和现在一样。

+0

啊!像魔术一样工作。你是一个绅士和学者。 – CIA