Раскрывающийся список ASP.NET Core MVC с одним выбором - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь изучить ASP .NET Core и создаю простое веб-приложение для отслеживания выигрышей / проигрышей в видеоигре, в которую я играю.На одном экране я бы хотел, чтобы пользователь выбрал символ и сцену из двух выпадающих списков, которые заполнены данными из базы данных SQL.Проблема, с которой я столкнулся, заключается в том, что я не могу отобразить поля как раскрывающийся список с одним выбором.Они будут отображаться только как поля с несколькими вариантами выбора и полосой прокрутки внутри.

enter image description here

Вот код, который я использую для моего контроллера:

public class HomeController : Controller
{
    public readonly IConfiguration configuration;
    private readonly DatabaseContext _context;
    Repository _repository = new Repository();

    public HomeController(IConfiguration config, DatabaseContext context)
    {
        this.configuration = config;
        _context = context;
    }

    public IActionResult AddGame()
    {
        List<CharacterViewModel> characterList = new List<CharacterViewModel>();
        List<StageViewModel> stageList = new List<StageViewModel>();

        characterList = (from Name in _context.Characters select Name).ToList();
        characterList.Insert(0, new CharacterViewModel { CharacterID = 0, Name = "" });
        ViewData["characterList"] = characterList;
        ViewBag.characterList = characterList;


        stageList = (from Stage in _context.Stages select Stage).ToList();
        stageList.Insert(0, new StageViewModel { StageID = 0, Name = "" });
        ViewData["stageList"] = stageList;
        ViewBag.stageList = stageList;

        AddGameViewModel addGameViewModel = new AddGameViewModel();
        addGameViewModel.Characters = characterList;
        addGameViewModel.Stages = stageList;

        return View(addGameViewModel);
    }
}

Для моей модели персонажа (модель сценыпочти идентично):

public class CharacterViewModel
{
    [Key]
    public int CharacterID { get; set; }

    [Display(Name = "CharacterName")]
    public string Name { get; set; }
}

И, наконец, мое мнение:

<form asp-controller="HomeController" asp-action="AddGame" method="post" class="form-horizontal" role="form">
<div class="form-group">
    <div class="row">
        <div asp-validation-summary="ModelOnly"></div>
        <div class="col-xs-12 col-sm-6 col-lg-4">
            <p>Character</p>
            <select asp-for="Characters" id="characterSelect"
                    class="dropdown"
                    asp-items="@(new SelectList(ViewBag.CharacterList, "CharacterID", "Name"))"></select>
        </div>
    </div>
    <div class="row">
        <div asp-validation-summary="ModelOnly"></div>
        <div class="col-xs-12 col-sm-6 col-lg-4">
            <p>Stage</p>
            <select asp-for="Stages" id="stageSelect"
                    class="dropdown"
                    asp-items="@(new SelectList(ViewBag.StageList, "StageID", "Name"))"></select>
        </div>
    </div>
</div>
</form>

Я следовал Этот урок , чтобы добраться до того места, где я сейчас, и я 'я не уверен, что я мог бы сделать иначе, потому что это не сработало.

1 Ответ

0 голосов
/ 12 декабря 2018

Для Characters и Stages вы используете asp-for:

<select asp-for="Characters" ...
<select asp-for="Stages" ...

Если посмотреть, как вы конфигурируете AddGameViewModel, кажется, что у него есть два следующих свойства:

List<Character> Characters { get; set; }
List<Stage> Stages { get; set; }

Когда помощник по тегам обрабатывает ваши asp-for выражения, он определяет, что вы хотите иметь возможность выбирать множественные Character с и Stage с, просто потому, чтомодель, на которую она смотрит, представляет список для каждого (в итоге добавляется атрибут multiple к элементу select).

Чтобы сделать эту работу, вы можете просто изменить два свойства I 'мы упомянули:

Character Character { get; set; }
Stage Stage { get; set; }

Это также потребует удаления следующих (уже избыточных) строк:

addGameViewModel.Characters = characterList;
addGameViewModel.Stages = stageList;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...