簡體   English   中英

Razor 頁面:從頁面獲取字符串列表到頁面模型

[英]Razor Pages: Get List of Strings from Page into Page Model

我的剃刀頁面術語不是最好的,所以如果我搞砸了措辭,我深表歉意。

在我的應用程序中,用戶提供了一個訂單號,我向他們提供了與之關聯的部件號列表(除其他外)。 我使用 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’隱式轉換為‘對象’。”

我只需要能夠將舊零件編號列表(我已經有了)與屏幕上顯示的輸入字段進行比較以檢查更改。 如果發現更改,我會將存儲在數據庫中的零件號更新為該零件號。 對於那些想知道為什么所有這些都是必要的人來說,這個應用程序將 100% 被內部使用,他們知道他們對訂單做了什么以及為什么。

我不知道是否有正確的位置可以對字符串列表執行 .Add() 操作,或者字符串列表是否是執行此任務的正確方法。 任何有關如何完成此任務的提示將不勝感激!

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

編輯:我忘了提及如果我嘗試提交表單(沒有上面提到的 @Model 行)會發生什么。 我得到這個例外:

InvalidCastException:無法將“System.Collections.Generic.List`1[System.String]”類型的對象轉換為“System.String”類型。

我想這是因為我只是想將字符串放入 PartNumberList 而不執行 .Add()。

我發現了這個問題,純粹是偶然的。 我不知道為什么,但我至少可以告知什么。

問題在於這一行:

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

我將其注釋掉,突然間一切正常。 我的猜測是它試圖將字符串列表轉換為字符串以對其進行驗證。 我必須找到另一種方法來驗證我的零件編號列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM