提交时未设置一个模型属性

本文关键字:一个 模型 属性 设置 提交 | 更新日期: 2023-09-27 18:33:06

以前从未遇到过此问题,但它发生在单个MVC操作上,所有其他模型属性都传递给操作方法,但省略了ONE。

在 BilledItemViewModel 模型中,出现问题的属性声明为:

[Required]
[Display(Name="Factura")]
public int BillId { get; set; }

所有其他属性都可以正常工作,但上面的属性不能。

操作方法签名:

[HttpPost][ValidateAntiForgeryToken]
public ActionResult AddBillItem([Bind(Include = "BillId,ItemCodeId,Quantity,UnitPrice,Notes,TaxPercent,IsDebit,Description")] Models.BilledItemViewModel bitem)

该属性在视图上显示,如下所示:

                    <div class="form-group">
                        @Html.LabelFor(model => model.BillId, htmlAttributes: new { @class = "control-label col-md-2" })
                        <div class="col-md-10">
                            <div class="col-sm-4 input-group">
                                <span class="input-group-addon">#</span>
                                @Html.EditorFor(model => model.BillId, new { htmlAttributes = new { @class = "form-control", disabled = "disabled" } })
                                @Html.ValidationMessageFor(model => model.BillId, "", new { @class = "text-danger" })
                            </div>
                        </div>
                    </div>

调试时,我在操作上设置了一个断点,它命中,它还说模型状态有效。当我检查传递的对象(bitem)的值时,我可以看到所有属性都具有我在表单中输入的值,除了BillId,它是零而不是一。

提交时未设置一个模型属性

问题是您的 BillId 在您的视图中被禁用。禁用的字段不会发送到服务器。要么启用它进行编辑,要么使其成为隐藏输入。

@Html.HiddenFor(h => h.BillId)

隐藏的输入对用户不可见,但会发送到服务器以及表单中的其他字段。

您也可以将其标记为只读。

只读控件将发送到服务器。