1

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

1 に答える 1

0

ここで責任を混合しています。リポジトリは、ビュー モデルと ViewBag では機能しません。リポジトリはドメイン モデルを返す必要があります。これらのドメイン モデルをビュー モデルにマップし、それらのビュー モデルをビューに渡すのはコントローラーの役割です。このPopulateAssigneUserDataメソッドは、リポジトリに存在するべきではありません。aspnet_Roleリポジトリには、指定された ID (編集アクションで現在持っているコード)を返すメソッドが必要です。

于 2012-07-08T17:54:57.207 に答える