Ввод отображает значение другого элемента списка - PullRequest
1 голос
/ 28 февраля 2020

У меня проблема при попытке связать элементы ввода с элементами списка. Страницы с этой проблемой очень сложны, поэтому я попытаюсь воспроизвести проблему, используя простую страницу бритвы со списком строк. Моя страница 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 генерирует следующий результат:

enter image description here

Кажется, все работает. Для каждого элемента у нас есть значение в виде текста и один вход, который содержит значение элемента.

Теперь я нажимаю кнопку отправки, чтобы запустить метод OnPost, который отсортирует данные, и обновленное представление выглядит следующим образом:

enter image description here

Как видите, текст для каждого элемента отображается правильно. Они сортируются так, как мы изменили список в методе OnPost, но входные данные содержат значения, представленные формой, вместо того, чтобы иметь обновленное значение после сортировки списка.

Может кто-нибудь сказать мне, как исправить <input asp-for="Titles[i]" class="form-control" /> тег, чтобы он отображал значение, которое на самом деле имеет текущий элемент?

1 Ответ

1 голос
/ 28 февраля 2020

Может кто-нибудь сказать мне, как исправить тег, чтобы он отображал значение, которое на самом деле имеет текущий элемент?

Я могу воспроизвести ту же проблему, и я считаю, что она кажется чтобы получить значение из ModelState до Model, что вызывает вышеуказанную проблему.

Чтобы исправить это, мы можем попытаться очистить его, как показано ниже.

public IActionResult OnPost()
{

    Titles = Titles.OrderBy(m => m).ToList(); ;

    // var ms_values = ModelState.Values;

    ModelState.Clear();

    return Page();
}

Примечание: значение ModelState

enter image description here

...