将列表值传递给 ASP.NET MVC 中的视图模型 class 变量

Pass list value to view model class variable in ASP.NET MVC

我需要将记录列表传递给视图模型中的 class 变量(用户和组),但我看不到视图模型对象 (_UserAndGroupModel) 识别其 class 对象,我不确定正是我在这里所缺少的。

视图模型

 public class UserGroup_ViewModel
{
    public User Users { get; set; }
    public Group Groups { get; set; }
}

每个 class 用户和组都有自己的变量和集合项

在下面的代码行中,我需要传递列表并分配给视图模型中的用户对象和组对象

 public partial class UserManagement_Services 
{
    List<UserGroup_ViewModel> _UserAndGroupModel = new List<UserGroup_ViewModel>();

    public void GetUserAndGroups()
    {
        using(var _uow = new UserManagement_UnitOfWork())
        {
            _UserAndGroupModel.Users= _uow.User_Repository.GetAll();
            _UserAndGroupModel.Groups = _uow.Group_Repository.GetAll();

         //error here   ??????????????
        }
    }
}

控制器方法

  public ActionResult AddUserInGroup()
    {
        var _UserAndGroupList = _userServices.GetUserAndGroups();

        return PartialView("AddUserInGroup_Partial", _UserAndGroupList);
    }

查看

@model IEnumerable<App.DAL.Model.UserGroup_ViewModel>

@Html.DisplayNameFor(模型=>模型) @Html.DisplayNameFor(型号=> model.LastName) @Html.DisplayNameFor(型号=> model.Age) @Html.DisplayNameFor(型号=> model.EmailAddress)

    @foreach (var item in Model)
    {....

在执行模型 => 模型时,我看不到 ViewModel class 变量。????

你的错误源于这一行

List<UserGroup_ViewModel> _UserAndGroupModel = new List<UserGroup_ViewModel>();

_UserAndGroupModel 是一个 List,所以当你设置

_UserAndGroupModel.Users = ...

这是无效的,因为 Users 是列表中 的 属性,而不是列表本身。

然而,这个

_UserAndGroupModel.First().Users = ...

例如会起作用。

这是答案,非常感谢 Ammar 的帮助!

public class UserGroup_ViewModel
{
    public List<User> Users { get; set; }
    public List<Group> Groups { get; set; }

}

.

public UserGroup_ViewModel GetUserAndGroups()
    {
        using(var _uow = new UserManagement_UnitOfWork())
        {
            _UserAndGroupModel.Users = _uow.User_Repository.GetAll().ToList();
            _UserAndGroupModel.Groups = _uow.Group_Repository.GetAll().ToList();

            return _UserAndGroupModel;
        }

    }

我会做得有点不同。您想 return 将单个视图模型转换为由用户列表和组列表组成的视图(如果我错了,请纠正我)。我会在视图模型的构造函数中将列表初始化为空(不包含任何项目):

public class UserGroup_ViewlModel
{
     public UserGroup_ViewlModel()
     {
          Users = new List<User>();
          Groups = new List<Group>();
     }

     public List<User> Users { get; set; }

     public List<Group> Groups { get; set; }
}

然后在您的服务层构建视图模型并填充用户和组,然后 return 视图模型到调用方法,在这种情况下我假设控制器的操作方法:

public class UserManagement_Services
{
     public UserGroup_ViewModel GetUserAndGroups()
     {
          UserGroup_ViewModel _UserAndGroupModel = new UserGroup_ViewModel();

          using(var _uow = new UserManagement_UnitOfWork())
          {
              _UserAndGroupModel.Users = _uow.User_Repository.GetAll();
              _UserAndGroupModel.Groups = _uow.Group_Repository.GetAll();
          }

          return _UserAndGroupModel;
     }
}

只需确保 User_Repository.GetAll()Group_Repository.GetAll() 的 return 类型为 List<User>List<Group>

然后你的控制器可能看起来像这样:

public class UserController : Controller
{
     private IUserManagement_Services userManagementService;

     public UserController(IUserManagement_Services userManagementService)
     {
          this.userManagementService = userManagementService;
     }

     public ActionResult Index()
     {
          // The service will return a view model already populated with the users and groups
          UserGroup_ViewlModel model = userManagementService.GetUserAndGroups();

          return View(model);
     }
}

在您的视图中,您将拥有以下内容,接受通过 action 方法传入的视图模型并显示用户和组:

@model MyProject.Models.UserGroup_ViewlModel

 <table>
      <thead>
           <tr>
                <th>First Name</th>
                <th>Last Name</th>
                <th>Groups</th>
           </tr>
      </thead>
      <tbody>
           @foreach (var user in Model.Users)
           {
                <tr>
                     <td>@user.FirstName</td>
                     <td>@user.LastName</td>
                     <td>
                          <select>
                               @foreach (var group in Model.Groups)
                               {
                                    <option>group.GroupName</option>
                               }
                          </select>
                     </td>
                </tr>
           }
      </tbody>
 </table>

上面的代码根本没有经过测试,视图中的 @ 符号可能存在​​一些问题。我可以看到你想要达到的目的。 table 中的用户列表,然后每行你想要一个你想要 select 的用户组的下拉列表,然后发送回控制器。这超出了 post 的范围,开始一个新的。我已经帮助您走上了正确的轨道,您只需要花更多时间阅读 ASP.NET MVC。

希望对您有所帮助:)