单个视图中的多个存储库

时间:2014-02-11 23:05:57

标签: c# viewmodel

我阅读了一些关于创建包含多个存储库的视图的问题,但我似乎无法获得正确的组合以使其工作。

我连接到SQL数据库中三个不同表的3个存储库。我有每个正确显示信息的控制器和视图模型。我似乎无法获得部分观点。当我创建一个视图而不是尝试在视图中使用partialview时,我收到模型不包含存储库的错误。我想知道我是否只需要一个包含3个存储库类的文件。

我有: DomainPlayerRepository.CS

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Domain.Games;

namespace Domain.Abstract
{
    public interface DomainPlayerRepository
    {
        IQueryable<Player> Player { get; }
    }

}

DomainGameRepository.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Domain.Games;

namespace Domain.Abstract
{
    public interface DomainGameRepository
    {
        IQueryable<Game> Game { get; }
    }
}

GamePartialView.cshtml

@model Domain.Games.Game

<div class="Game">
    @Model.Date   @Model.NumPlayers @Model.PotMoney

</div>

List.cshtml(适用于播放器)

@model IEnumerable<Domain.Games.Player>

@{
    ViewBag.Title = "Players";
}

<h2>Player</h2>

@foreach (var p in Model) 
{
    <div class ="player">
       <h3>@p.FName  @p.LName Handicap @p.Handicap.ToString()</h3>
    </div>

}

@foreach (var p in Model)
{
    <div class ="game">
      @Html.Partial("GamePartialView", p)
    </div>

}

我一直在尝试使用我的存储库获取一个viewmodel,但这还没有用。

MultiRepositoryViewModel.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Domain.Games;

namespace WebUI.Models
{
    public class MultiRepositoryViewModel
    {
        public IEnumerable<Player> Player { get; set; }
        public IEnumerable<Game> Game { get; set; }
    }
}

1 个答案:

答案 0 :(得分:0)

将视图模型更改为ViewModel并使用您定义的属性

@model WebUI.Models.MultiRepositoryViewModel

@{
    ViewBag.Title = "Players";
}

<h2>Player</h2>

@foreach (var p in Model.Player) 
{
    <div class ="player">
       <h3>@p.FName  @p.LName Handicap @p.Handicap.ToString()</h3>
    </div>
}

@foreach (var p in Model.Game)
{
    <div class ="game">
       @Html.Partial("GamePartialView", p)
    </div>
}