ASP.NET MVC viewbag со строками для выпадающего списка - PullRequest
0 голосов
/ 04 марта 2019

Я пытаюсь создать раскрывающийся список для рангов и один для типов, который фильтрует индекс, содержащий ранги, типы и имена.

Проблема, с которой я столкнулся, состоит в том, что мой раскрывающийся список содержит только 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();
        }
...