我正在将我的crud操作从控制器移动到存储库中。
如何将视图包信息从存储库传递到控制器,然后传递给视图?
我的控制器调用存储库中的PopulateAssigneUserData
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WWW.Models;
using WWW.DAL;
using WWW.ViewModels;
namespace WWW.Controllers
{
public class RolesController : Controller
{
private Iaspnet_RolesRepository aspnet_RolesRepository;
public RolesController()
{
this.aspnet_RolesRepository = new Aspnet_RolesRepository(new WorldofWarCraftContext());
}
public RolesController(Iaspnet_RolesRepository aspnet_RolesRepository)
{
this.aspnet_RolesRepository = aspnet_RolesRepository;
}
//
// GET: /Roles/Edit/5
public ActionResult Edit(Guid id)
{
aspnet_Roles aspnet_Role = db.aspnet_Roless
.Include(i => i.aspnet_User)
.Where(i => i.RoleId == id)
.Single();
PopulateAssigneUserData(aspnet_Role);
return View(aspnet_Role);
}
我的存储库包含以前存在于控制器中的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using WWW.Models;
using WWW.ViewModels;
namespace WWW.DAL
{
public class Aspnet_RolesRepository : Iaspnet_RolesRepository, Iaspnet_UsersRepository , IDisposable
{
private WorldofWarCraftContext context;
public Aspnet_RolesRepository(WorldofWarCraftContext context)
{
this.context = context;
}
public IEnumerable<aspnet_Roles> GetRoles()
{
return context.aspnet_Roless.ToList();
}
public aspnet_Roles GetRolesByID(Guid id)
{
return context.aspnet_Roless.Find(id);
}
private void PopulateAssigneUserData(aspnet_Roles aspnet_Role)
{
var allUsers = context.aspnet_Users;
var rolesUsers = new HashSet<Guid>(aspnet_Role.aspnet_User.Select(c => c.UserId));
var viewModel = new List<AssigneUserData>();
foreach (var User in allUsers)
{
viewModel.Add(new AssigneUserData
{
UserId = User.UserId,
UserName = User.UserName,
Assigned = rolesUsers.Contains(User.UserId)
});
}
ViewBag.Users = viewModel;
}
答案 0 :(得分:0)
你在这里混合责任。存储库不应与视图模型和ViewBag一起使用。存储库应返回域模型。控制器有责任将这些域模型映射到视图模型并将这些视图模型传递给视图。此PopulateAssigneUserData
方法不应存在于您的存储库中。在您的存储库中,您应该有一个方法,该方法返回一个给定id的aspnet_Role
实例(您在编辑操作中当前拥有的代码)。