Je déplace mes opérations crud du contrôleur vers un référentiel.Comment transmettre les informations du viewbag à partir du référentiel
Comment puis-je transmettre les informations du viewbag du référentiel au contrôleur, puis à la vue?
Mes appels contrôleur PopulateAssigneUserData dans le référentiel
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);
}
Mon référentiel a le code qui permet de vivre dans le contrôleur
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;
}
Voulez-vous dire que je devrais laisser ce morceau de code dans le contrôleur? – MataHari
Oui, vous avez mélangé les choses. Le référentiel doit contenir la logique du modèle de domaine (qui est actuellement dans votre contrôleur). Vous avez fait exactement l'inverse de ce qu'il devrait être fait. Un référentiel ne devrait absolument pas avoir la moindre notion de ViewBag ou de modèles de vue. Un référentiel représente votre couche d'accès aux données. –