Razor 页面:从页面获取字符串列表到页面模型

Razor Pages: Get List of Strings from Page into Page Model

我的剃刀页面术语不是最好的,所以如果我搞砸了措辞,我深表歉意。

在我的应用程序中,用户提供了一个订单号,我向他们提供了与之关联的零件号列表(以及其他信息)。我使用 foreach 循环来创建和填充足够的输入字段来保存所有零件号。基本上,用户随后可以更改零件号(客户要求),然后提交表格。

我的问题在于从页面中获取新值并将它们带入 POST 请求中的页面模型。我可以使用 int 列表轻松获取整数,但必须使用 .Add() 填充字符串列表。 Google 搜索和我似乎都不知道如何从页面中获取这些字符串值并将其放入页面模型中,尤其是因为 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);

在那里。我把这个留在里面是为了表明我试过这个方法,但是它抛出了一个语法错误:"Cannot implicitly convert type 'void' to 'object'."

我只需要能够将旧零件编号列表(我已经有了)与屏幕上显示的输入字段进行比较以检查更改。如果我发现有变化,我会将存储在数据库中的部件号更新为该部件号。对于那些想知道为什么所有这些都是必要的人,这个应用程序将 100% 由内部人员使用,他们会知道他们对订单做了什么以及为什么。

我不知道是否有对字符串列表执行 .Add() 的正确位置,或者字符串列表是否是完成此任务的正确方法。任何有关如何完成此任务的提示都将不胜感激!

谢谢大家,祝你有美好的一天!

编辑:我忘了提及如果我尝试提交表单(没有上面提到的 @Model 行)会发生什么。我得到这个例外:

InvalidCastException: Unable to cast object of type 'System.Collections.Generic.List`1[System.String]' to type 'System.String'.

我想这是因为我只是想在不执行 .Add() 的情况下将字符串放入 PartNumberList。

我发现了这个问题,纯属偶然。我不知道为什么,但我至少可以告知是什么。

问题出在这一行:

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

我把它注释掉了,突然间一切正常了。我的猜测是它试图将字符串列表转换为字符串以验证它。我必须找到另一种方法来验证我的零件号列表。