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

时间:2014-12-04 20:39:26

标签: c# asp.net-mvc data-binding asp.net-mvc-5 model-binding

以前从未遇到过这个问题,但它发生在单个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。

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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

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