Я пытаюсь создать раскрывающийся список для рангов и один для типов, который фильтрует индекс, содержащий ранги, типы и имена.
Проблема, с которой я столкнулся, состоит в том, что мой раскрывающийся список содержит только Microsoft.AspNetCore.MVC.Rendering
вместо фактических значений.
Я заметил, сколько раз он показывает Microsoft.AspNetCore.MVC.Rendering
соответствует количеству значений, которые он должен показать в списке.
Мне также было интересно, если этовозможно сбросить фильтр типа на ноль, когда фильтр ранга получает значение, так как вы не можете фильтровать по рангу и типу одновременно (по крайней мере, я об этом не знаю, так как индекс принимает только 1 аргумент фильтра иЯ думаю, что добавление еще одного аргумента фильтра приведет к еще большему беспорядку)
Это то, что я имею до сих пор
Модель
public class Lesson
{
public int LessonId { get; set; }
public string Name { get; set; }
public string Type { get; set; }
public int Rank { get; set; }
public string PhotoURL { get; set; }
public ICollection<PersonLesson> PersonLessons { get; set; }
public Lesson()
{
//for bridgtable, not important for this I assume
PersonLessons = new HashSet<PersonLesson>();
}
public Lesson(string name, string type, int rank) : this()
{
Name = name;
Type = type;
Rank = rank;
}
Представление
@model IEnumerable<Taijitan.Models.Domain.Lesson>
@{
ViewData["Title"] = "Lessons";
}
<h2>@ViewData["Title"]</h2>
<div>
@Html.DropDownList("Type", ViewBag.Types, "Type", new { onchange = @"form.submit();" })
@Html.DropDownList("Rank", ViewBag.Ranks, "Rank", new { onchange = @"form.submit();" })
</div>
Контроллер
Этот код содержит довольно много кода, контроллеры и представления все еще немного расплывчаты для меня, поэтому явключены в весь класс, так как я понятия не имею,шляпа важна, а что нет.
namespace Taijitan.Controllers
{
public class LessonController : Controller
{
private readonly ILessonRepository _LessonRepository;
public LessonController(ILessonRepository lessonRepository)
{
_LessonRepository = lessonRepository;
}
public IActionResult Index(string filter)
{
IEnumerable<Lesson> Lessons = null;
if (filter == null)
Lessons = _LessonRepository.GetAll();
else if (filter.All(c => char.IsDigit(c))) {
Lessons = _LessonRepository.GetByRank(int.Parse(filter));
}
else if (filter.All(c => char.IsLetter(c)))
{
Lessons = _LessonRepository.GetByType(filter);
}
ViewBag.Types = GetTypesAsSelectList();
ViewBag.Ranks = GetRanksAsSelectList();
return View(Lessen);
}
private SelectList GetTypesAsSelectList()
{
List<SelectListItem> TypesList = new List<SelectListItem>();
foreach (string type in _lessonRepository.GetTypes())
{
TypesList.Add(new SelectListItem { Text = type, Value = type});
}
return new SelectList(TypesList);
}
private SelectList GetRanksAsSelectList()
{
List<SelectListItem> RanksList = new List<SelectListItem>();
foreach (int rank in _LessonRepository.GetRanks())
{
RanksList.Add(new SelectListItem { Text = rank.ToString(), Value = rank.ToString()});
}
return new SelectList(RanksList);
}
}
Репо
public class LessonRepository : ILessonRepository
{
private readonly DbSet<Lesson> _lessons;
private readonly ApplicationDbContext _dbContext;
public LessonRepository(ApplicationDbContext dbContext)
{
_dbContext = dbContext;
_lessen = _dbContext.Lessons;
}
public IEnumerable<int> GetRanks()
{
return _lessen.Select(l => l.Rank).Distinct().ToList();
}
public IEnumerable<string> GetTypes()
{
return _lessons.Select(l => l.Type).Distinct().ToList();
}