You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

表单验证失败后PurchaseOrderNumber丢失,修复后验证消息无法正常显示求助

采购订单编号字段验证消息不显示问题排查

采购订单编号(PurchaseOrderNumber)由外部函数生成,创建采购订单时自动填充至对应字段。但表单提交因验证错误失败时,该编号会从字段中消失,页面刷新后还会生成新的编号。

原代码实现

原表单字段代码

<div class="form-group col-md-4">
    @Html.LabelFor(model => model.PurchaseOrderSingle.PurchaseOrderNumber)
    <input asp-for="PurchaseOrderSingle.PurchaseOrderNumber" class="form-control" value="@ViewData["PONumber"]" readonly="readonly" />
    @Html.ValidationMessageFor(model => model.PurchaseOrderSingle.PurchaseOrderNumber, "", new { @class = "text-danger" })
</div>

原控制器Create方法代码

ViewData["ShippingMeth"] = new SelectList(shippingMethods, "ShippingMethodId", "ShippingMethodName");
_PurchaseOrderDb.PurchaseOrderSingle = new PurchaseOrder();
ViewData["PONumber"] = await NewOrderNumber(false);
return View();

修改后的代码实现

为解决字段值丢失问题,将表单代码修改为绑定Model属性:

修改后的表单字段代码

<div class="form-group col-md-4">
    @Html.LabelFor(model => model.PurchaseOrderSingle.PurchaseOrderNumber)
    <input asp-for="PurchaseOrderSingle.PurchaseOrderNumber" class="form-control" value="@Model.PurchaseOrderSingle.PurchaseOrderNumber" readonly="readonly" />
    @Html.ValidationMessageFor(model => model.PurchaseOrderSingle.PurchaseOrderNumber, "", new { @class = "text-danger" })
</div>

同时更新控制器代码,返回包含PurchaseOrderNumber的ViewModel:

修改后的控制器Create方法代码

ViewData["ShippingMeth"] = new SelectList(shippingMethods, "ShippingMethodId", "ShippingMethodName");
_PurchaseOrderDb.PurchaseOrderSingle = new PurchaseOrder();
var poNumber = await NewOrderNumber(false);
//ViewData["PONumber"] = poNumber;
var model = new PurchaseOrderViewModel
{
    PurchaseOrderSingle = new PurchaseOrder
    {
        PurchaseOrderNumber = poNumber
    },
}; 
return View(model);

当前问题

现在PurchaseOrderNumber能正确显示,但模型验证消息无法正常显示,恳请帮忙排查原因及解决方法。

内容的提问来源于stack exchange,提问作者Rashmika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 20:42:12