【问题标题】:Pass list value to view model class variable in ASP.NET MVC传递列表值以查看 ASP.NET MVC 中的模型类变量
【发布时间】:2015-05-21 09:52:03
【问题描述】:

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

视图模型

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

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

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

 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 => model.LastName) @Html.DisplayNameFor(model => model.Age) @Html.DisplayNameFor(model => model.EmailAddress)

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

在视图中,当我执行模型 => 模型时,我看不到 ViewModel 类变量。????

【问题讨论】:

  • 不要使用var,如果你知道_userServices.GetUserAndGroups()返回一个UserGroup_ViewModel然后使用它。

标签: c# asp.net-mvc repository-pattern asp.net-mvc-viewmodel


【解决方案1】:

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

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

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

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() 的返回类型为 List&lt;User&gt;List&lt;Group&gt;

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

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>

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

我希望这会有所帮助:)

【讨论】:

  • 这是正确的,此外我的 GetAll() 方法正在返回 IQueryable,我遇到了另一个问题,即从视图模型中填充模型
  • 您的问题是什么?解释你想要做什么。
  • 给我上传屏幕截图
  • 我无法从视图模型中访问用户和组。我的视图是强类型视图
  • 我在上面的问题中更新了控制器和查看代码
【解决方案2】:

你的错误源于这一行

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

_UserAndGroupModel 是一个List,所以当你用

设置时

_UserAndGroupModel.Users = ...

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

但是,这个

_UserAndGroupModel.First().Users = ...

例如可以工作。

【讨论】:

  • 那么我如何在 GetUserAndGroups() 方法中分配列表??
  • @toxic,按照我上面的建议更改您的 ViewModel。然后它应该停止给你一个错误。让我知道它是否仍然存在
  • 不,我仍然遇到错误,我已经上传了我的问题中的错误屏幕截图
【解决方案3】:

这是答案,非常感谢 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;
        }

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-01
    • 2021-12-03
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多