以前从未遇到过这个问题,但它发生在单个MVC操作上,所有其他模型属性都被传递给action方法但是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>
调试时我在动作上设置断点并且它命中,它也表示模型状态IS有效。当我检查传递的对象(bitem)的值时,我可以看到所有属性都具有我在表格EXCEPT BillId中输入的值,它是ZERO而不是ONE。
答案 0 :(得分:3)
问题是您的BillId在您的视图中已停用。禁用的字段不会发送到服务器。要么只是启用它进行编辑,要么将其设为隐藏输入。
@Html.HiddenFor(h => h.BillId)
隐藏的输入对用户不可见,但会发送到服务器以及表单中的其他字段。
答案 1 :(得分:1)
您也可以将其标记为只读。
只读控件将被发送到服务器。