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

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

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

<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 за вопрос и ответ.

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

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

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

1 ответ

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

1. В 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. В 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();
Другие вопросы по тегам