提交时未设置一个模型属性
本文关键字:一个 模型 属性 设置 提交 | 更新日期: 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)
隐藏的输入对用户不可见,但会发送到服务器以及表单中的其他字段。
您也可以将其标记为只读。
只读控件将发送到服务器。