Компонент динамического просмотра ASP.NET
Я пытаюсь сделать веб-приложение похожим на викию для tvshows, чтобы укрепить мои навыки.NET (в данном случае MVC Core). Это веб-приложение, однако, скрывает информацию об эпизодах, которые вы еще не смотрели.
Я хочу поместить 2 ползунка (сезон и эпизод) поверх большинства страниц, используя компонент просмотра. При изменении значений ползунков текущая страница должна обновиться, но сохранить текущие фильтры.
Я никогда раньше не работал с компонентами представления в.NET, возможно ли это или есть лучший способ сделать это?
Просмотр компонентов
public class EpisodeSliderViewComponent:ViewComponent
{
private readonly IEpisodeRepository _episodeRepository;
public EpisodeSliderViewComponent(IEpisodeRepository episodeRepository)
{
_episodeRepository = episodeRepository;
}
public Task<IViewComponentResult> InvokeAsync(int tvShowId, string controllerName)
{
IQueryable<Episode> episodes = _episodeRepository.GetByTvShow(tvShowId);
int seasonNr = HttpContext.Session.GetInt32($"{tvShowId}:SeasonNr") ?? 0;
int episodeNr = HttpContext.Session.GetInt32($"{tvShowId}:EpisodeNr") ?? 0;
return Task.FromResult<IViewComponentResult>(View(new EpisodeSliderViewModel(tvShowId, episodes, seasonNr, episodeNr, controllerName)));
}
}
Посмотреть модель
public class EpisodeSliderViewModel
{
public int TvShowId { get; set; }
public int NrOfSeasons { get; private set; }
public int SeasonNr { get; set; }
public int[] NrOfEpisodes { get; set; }
public int EpisodeNr { get; set; }
public string ControllerName { get; private set; }
public EpisodeSliderViewModel() { }
public EpisodeSliderViewModel (int tvShowId, IQueryable<Episode> episodes, int seasonNr, int episodeNr, string controllerName)
{
TvShowId = tvShowId;
SeasonNr = seasonNr;
EpisodeNr = episodeNr;
ControllerName = controllerName;
NrOfSeasons = episodes.Select(e => e.SeasonNr).Max();
NrOfEpisodes = new int[NrOfSeasons+1];
for (int i = 1; i <= NrOfSeasons; i++)
{
NrOfEpisodes[i] = episodes.Where(e => e.SeasonNr == i).Select(e => e.EpisodeNr).Max();
}
}
}
Просмотр HTML компонента
<form asp-controller="@Model.ControllerName" asp-action="Range" id="episodeForm">
???asp-controller/asp-action are not fixed, i was just trying somthing
<input type="hidden" asp-for="TvShowId" />
Season: @Model.SeasonNr
<input asp-for="SeasonNr" type="range" min="0" max="@Model.NrOfSeasons" step="1" id="seasonSlider" />
Episode: @Model.EpisodeNr
<input asp-for="EpisodeNr" type="range" min="0" max="@Model.NrOfEpisodes[Model.SeasonNr]" step="1" id="episodeSlider" />
</form>
Список эпизодов HTML (необходимый фильтр)
<form asp-controller="Episodes" asp-action="Index">
<p>
<input type="hidden" asp-for="TvShowId" />
Season: <select asp-for="SeasonFilter" asp-items="Model.Seasons"></select>
<button type="submit">
<span class="glyphicon glyphicon-search"></span>
</button>
</p>
</form>