Razor Pages: получить список строк из страницы в модель страницы - PullRequest
0 голосов
/ 11 января 2020

Терминология моих страниц бритвы не самая лучшая, поэтому я прошу прощения, если я облажался с формулировкой.

В моем приложении пользователь предоставляет номер заказа, а я даю им список номеров деталей, связанных с это (между прочим). Я использую foreach l oop, чтобы создать и заполнить достаточно полей ввода для хранения всех номеров деталей. По сути, пользователь затем может изменить номера деталей (требование заказчика) и затем отправить форму.

Моя проблема заключается в получении новых значений со страницы и их переносе в модель страницы в запросе POST. , Целые числа, которые я могу легко получить, используя int списки, но списки строк должны быть заполнены с помощью .Add (). Google Search и я, похоже, не знаем, как получить эти строковые значения со страницы и в модель страницы, тем более что Google, похоже, предпочитает показывать мне проблемы с раскрывающимися списками, а не со строковыми списками.

Вот список строк, которые я упомянул. Он инициализируется в конструкторе.

[DisplayName("Part Number"), BindProperty, Required]
[StringLength(48, MinimumLength = 1, ErrorMessage = "Please enter a part number.")]
public List<string> PartNumberList { get; set; }

Соответствующая часть самой страницы:

@foreach (var part in Model.PartInfoList)
            {
            <tr class="row table-bordered">
                <td class="col-4">
                    <input type="hidden" asp-for="OldPartIDList" value="@part.PART_ID" name="OldPartIDList"/> @*This holds the "old" part ID's so the order can still be looked up when the user wants to change the part ID.*@
                    <input type="text" class="form-control mb-2 mr-sm-2" asp-for="NewPartIDList" value="@part.PART_ID" id="@part.PART_ID" name="NewPartIDList" onchange="HighlightField(this)" />
                    @*The id here is used to determine if the field should be highlighted or not.*@
                    <span class="text-danger" asp-validation-for="NewPartIDList"></span>
                </td>
                <td class="col-4">
                    <input type="text" class="form-control mb-2 mr-sm-2" asp-for="PartNumberList" value="@part.PART_NUMBER" id="@part.PART_NUMBER" name="PartNumberList" onchange="HighlightField(this)" />
                    @*The id here is used to determine if the field should be highlighted or not.*@
                    <span class="text-danger" asp-validation-for="PartNumberList"></span>
                    @Model.PartNumberList.Add(part.PART_NUMBER);
                </td> 
                <td class="col-4">
                    <input type="text" class="form-control mb-2 mr-sm-2" asp-for="QuantityList" value="@part.QUANTITY" id="@part.QUANTITY" name="QuantityList" onchange="HighlightField(this)" />
                    @*The id here is used to determine if the field should be highlighted or not.*@
                    <span class="text-danger" asp-validation-for="QuantityList"></span>
                </td>
            </tr>
            }

Вы заметите:

@Model.PartNumberList.Add(part.PART_NUMBER);

там , Я оставил это, чтобы показать, что я попробовал этот метод, но он выдает синтаксическую ошибку, которая говорит: «Невозможно неявно преобразовать тип« void »в« объект ».»

Мне просто нужно иметь возможность сравнить список старых номеров деталей (которые у меня уже есть) с полями ввода, отображаемыми на экране для проверки изменений. Если я нахожу изменение, я обновляю номер детали, хранящийся в базе данных, до этого номера детали. Для тех, кто интересуется, почему все это необходимо, это приложение будет на 100% использоваться людьми, которые будут знать, что они делают с заказом и почему.

Я не знаю, есть ли правильное место для выполнения .Add () для списка строк, или, если список строк является даже правильным путем к go для этой задачи. Любые советы о том, как выполнить sh эту задачу, будут оценены по достоинству!

Спасибо всем вам и пожеланий c day!

Редактировать: я забыл упомянуть, что произойдет, если я попытаюсь отправить форму (без указанной выше строки @Model). Я получаю это исключение:

InvalidCastException: Невозможно привести объект типа 'System.Collections.Generi c .List`1 [System.String]' к типу 'System.String'.

Я предполагаю, что это потому, что я просто пытаюсь бросить строки в PartNumberList без выполнения .Add ().

1 Ответ

0 голосов
/ 15 января 2020

Я нашел проблему, по чистой случайности. Я не знаю почему, но я по крайней мере могу сообщить о чем.

Проблема заключается в этой строке:

[StringLength(48, MinimumLength = 1, ErrorMessage = "Please enter a part number.")]

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

...