У меня проблема при попытке связать элементы ввода с элементами списка. Страницы с этой проблемой очень сложны, поэтому я попытаюсь воспроизвести проблему, используя простую страницу бритвы со списком строк. Моя страница PageModel выглядит следующим образом:
public class TestListModel : PageModel
{
[BindProperty]
public List<string> Titles { get; set; }
public IActionResult OnGet()
{
Titles = new List<string> { "Jan", "Feb", "Mar", "Apr" };
return Page();
}
public IActionResult OnPost()
{
Titles = Titles.OrderBy(m => m).ToList();
return Page();
}
}
У меня есть свойство Titles, которое имеет атрибут BindProperty. В методе OnGet я просто добавляю короткий список из четырех строк (первые четыре месяца года). В методе OnPost я просто сортирую заголовки.
Ниже вы можете увидеть эквивалент html.
<form method="post">
@for (int i = 0; i < Model.Titles.Count(); i++)
{
<div class="form-group">
<div>Value in div : @Model.Titles[i]</div>
<input asp-for="Titles[i]" class="form-control" />
</div>
}
<input type="submit" value="Submit" />
</form>
У меня есть форма, которая содержит al oop, которая отображает значение элемент и вход для каждого элемента списка. У меня также есть кнопка отправки для отправки элементов списка обратно на сервер. Метод OnGet генерирует следующий результат:
Кажется, все работает. Для каждого элемента у нас есть значение в виде текста и один вход, который содержит значение элемента.
Теперь я нажимаю кнопку отправки, чтобы запустить метод OnPost, который отсортирует данные, и обновленное представление выглядит следующим образом:
Как видите, текст для каждого элемента отображается правильно. Они сортируются так, как мы изменили список в методе OnPost, но входные данные содержат значения, представленные формой, вместо того, чтобы иметь обновленное значение после сортировки списка.
Может кто-нибудь сказать мне, как исправить <input asp-for="Titles[i]" class="form-control" />
тег, чтобы он отображал значение, которое на самом деле имеет текущий элемент?