【发布时间】:2025-12-04 18:15:04
【问题描述】:
我的剃须刀页面术语不是最好的,所以如果我搞砸了措辞,我深表歉意。
在我的应用程序中,用户提供了一个订单号,我向他们提供了与其相关的部件号列表(除其他外)。我使用 foreach 循环来创建和填充足够的输入字段来保存所有零件编号。基本上,用户可以更改零件编号(客户要求),然后提交表单。
我的问题来自于从页面中获取新值并将它们带入 POST 请求中的页面模型中。我可以使用 int 列表轻松获取整数,但必须使用 .Add() 填充字符串列表。谷歌搜索和我似乎都不知道如何从页面中获取这些字符串值并进入页面模型,特别是因为谷歌似乎更喜欢向我展示涉及下拉列表而不是字符串列表的问题。
这是我提到的字符串列表。它在构造函数中初始化。
[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' 隐式转换为 'object'。”
我只需要能够将旧零件编号列表(我已经拥有)与屏幕上显示的输入字段进行比较,以检查更改。如果发现更改,我会将存储在数据库中的部件号更新为该部件号。对于那些想知道为什么这一切都是必要的人来说,这个应用程序将 100% 在内部被人们使用,他们会知道他们对订单做了什么以及为什么。
我不知道是否有正确的位置来执行 .Add() 到字符串列表,或者字符串列表是否甚至是执行此任务的正确方法。任何有关如何完成此任务的提示将不胜感激!
谢谢大家,祝你有美好的一天!
编辑:我忘了提到如果我尝试提交表单会发生什么(没有上面提到的@Model 行)。我得到了这个例外:
InvalidCastException:无法转换类型的对象 'System.Collections.Generic.List`1[System.String]' 输入 'System.String'。
我想这是因为我只是想将字符串放入 PartNumberList 而不执行 .Add()。
【问题讨论】:
-
我不得不承认,我确实认为这是 Blazor 应用程序,因为您的标题是“Razor Pages”
-
欢迎来到 *。我对您正在尝试做什么感到有点困惑,但如果您要添加到似乎使用静态数据的列表中,您应该在模型而不是页面上进行。
-
当用户输入订单 ID 时,我会生成一个表单,其中包含每个部分的一组输入。每个零件都有零件 ID、零件编号和数量的输入。用户可以更改输入字段中的信息并提交表单。提交时,我根据表单数据检查原始数据,并据此更改订单数据。 Part ID 和 Quantity 运行良好,因为它们是整数。部分 # 是我被绊倒的地方,因为由于原始帖子中提到的错误,我无法找到在模型中获取表单的部分 # 的方法。希望能澄清问题。谢谢!!!
标签: c# asp.net string arraylist razor-pages