См. Мои комментарии по этому вопросу для получения дополнительной информации, чтобы я не повторял, почему я публикую этот ответ.
Итак, начнем с объявления модели вида:
public class PlayersStatsViewModel
{
public int PlayersOnline { get; set; }
public int TablesInPlay { get; set; }
public int AvailableTables { get; set; }
}
Затем мы пишем выделенный контроллер:
public class PlayersController: Controller
{
[ChildActionOnly]
public ActionResult Index()
{
var model = new PlayersStatsViewModel();
// TODO: You should absolutely use DI here and replace this hardcoding
using (var repository = new EFJugadorRepository())
{
model.PlayersOnline = repository.FindAllJugadores().Where(j => j.jugEstado == 100).Count();
}
// TODO: You should absolutely use DI here and replace this hardcoding
using (var estadisticaMesaRepository = new EFEstadisticaMesaRepository())
{
model.TablesInPlay = estadisticaMesaRepository.GetTablesInPlayCount;
model.AvailableTables = estadisticaMesaRepository.GetAvailableTablesCount;
}
return PartialView(model);
}
}
Далее вы пишете соответствующий частичный вид (~/Views/Players/Index.cshtml
):
@model PlayersStatsViewModel
<div id="players">
<p>
Jogadores Online:
<span class="onlinecount">
@Html.DisplayFor(x => x.PlayersOnline)
</span>
</p>
<p>
Mesas Jogando:
<span class="onlinecount">
@Html.DisplayFor(x => x.TablesInPlay)
</span>
</p>
<p>
Mesas Disponiveis:
<span class="onlinecount">
@Html.DisplayFor(x => x.AvailableTables)
</span>
</p>
</div>
и последний шаг - очистить ваш макет:
<div id="header-content">
<a href="@Url.Action("Index", "Home")">
<img class="mainlogo" src="@Url.Content("~/Public/images/logo.png")"/>
</a>
@Html.Action("Index", "Players")
<div id="login">
@Html.Partial("_LogOnPartial")
</div>
</div>
Не игнорируйте два TODO, которые я оставил в действии контроллера индекса. Они важны. Прямо сейчас ваш контроллер тесно связан с тем, как вы получаете доступ к своим данным (похоже на EF или что-то в этом роде). Слои в вашем приложении должны быть максимально тесно связаны. И чтобы добиться этого, вы должны работать с абстракциями. Вы должны абстрагироваться от уровня доступа к данным за интерфейсами. Затем пусть ваш контроллер принимает эти интерфейсы репозитория в качестве аргументов конструктора. Наконец, вы просто сконфигурируете свою инфраструктуру DI для обслуживания правильных реализаций (например, EF или чего-либо еще).