Как предварительно выбрать элемент в раскрывающемся списке, используя страницы ASP.NET Core Razor - PullRequest
0 голосов
/ 27 августа 2018

Если это поможет, мы используем страницы ASP.NET Core 2.1 и Razor (не традиционные MVC)

У меня проблемы с работой select.Мы генерируем список параметров для нашей страницы, используя список SelectListItem, который вводит перечисления, и помещаем его в наши asp-элементы, и это работает потрясающе.Для нашего asp-for мы используем метку, которая увеличивается, потому что имеет цикл из нескольких выпадающих списков.

<select asp-for="@Model.Answers[answerOptionIndex].AnswerText" 
        asp-items="@Model.CriticalIllnessTierSelectListItems" 
        class="form-control">
    <option></option>
</select>

Для добавления продукта это прекрасно работает, asp-for генерирует Answers[0].AnswerText для имени иAnswers_0__AnswerText для идентификатора, и это замечательно.

Беда в том, что нам нужно иметь возможность редактировать существующую форму, поэтому для предварительного заполнения значений я обнаружил, что вы можете использовать asp-for для этого, поэтомуЯ вставил @answerTextForQuestion для asp-for, и теперь при загрузке страницы предварительно выбран правильный параметр ... но тогда он портит мои идентификаторы и имя.

Когда я это делаю, я получаю это:

<select name="answerTextForQuestion" class="form-control" 
        id="answerTextForQuestion">

Что странно, он не устанавливает значение answerTextForQuestion, просто помещает переменную.

Я пытаюсь вручную установить имя и идентификатор в @Model.Answers[answerOptionIndex].AnswerText и оставляю asp-for как @answerTextForQuestion, но он игнорирует его и по-прежнему вводит @answerTextForQuestion для вопроса и ответа.

Я не знаю, как получить свой пирог и съесть его.Мне нужно, чтобы мой asp-for был @Model.Answers[answerOptionIndex].AnswerText, но мне также нужно было выбрать любое значение @answerTextForQuestion.Поскольку мы используем SelectListItem, я не могу просто выбросить выбранный атрибут справа.

Я обнаружил переполнение стека, которое пыталось использовать цикл, где, если этот элемент в выбранном соответствует answerTextForQuestion затем сделайте выбранный атрибут истинным, но это не сработало, и я прочитал в комментариях, что выбранный только для чтения, так что это не сработает. Я выделил это, потому что я боюсь, что это будет опровергнуто как повторяющийся пост.

Редактировать: возможно, лучше заголовок, если есть другой атрибут, который я могу использовать, чтобы сообщить браузеру, какой параметр следует предварительно выбрать без использования ASP-FOR.У нас есть много нашего AJAX, построенного вокруг имени и идентификатора, которые использует ASP-FOR, но мне просто нужна эта одна функция.Я посмотрел документы C #, но ничего не увидел.

1 Ответ

0 голосов
/ 27 августа 2018

Для предварительного выбора элемента в раскрывающемся списке можно сослаться на часть кода для простого примера, как показано ниже

1.In Edit.cshtml

<div class="form-group">
            <label asp-for="Movie.Genre" class="control-label"></label>
            <select  asp-for="Movie.Genre.Id" asp-items='(List<SelectListItem>)ViewData["Genres"]'></select>
        </div>

2.In Edit.cshtml.cs

Привязка модели

[BindProperty]
    public Movie Movie { get; set; }

    public Genre Genre { get; set; }

OnGetAsync ()

 Movie = await _context.Movie
                     .Include(m => m.Genre)
                     .SingleOrDefaultAsync(m => m.Id == id);

 ViewData["Genres"] = _context.Genre.Select(g => new SelectListItem { Value = g.Id.ToString(), Text = g.Name }).ToList();
...