表单上缺少部分视图模型数据提交

时间:2015-05-07 17:41:29

标签: c# asp.net asp.net-mvc forms

我有一个包含局部视图的视图。我需要将父视图中的值传递给局部视图。我是这样做的:

 <div>
   @Html.Partial("_DrugScan", new TIMS.Models._DrugScan() { ASNID = Model.ASNID })
</div>

“_DrugScan”类只包含两个属性,即ASNID和UPC。局部视图使用表单来填充UPC,如下所示:

@model TIMS.Models._DrugScan

@*@Scripts.Render("~Scripts/ScanDrugPost.js")*@



<div>
    @using (Html.BeginForm("DrugScan", "Receive", FormMethod.Post, new { @class = "form-horizontal", role = "form"}))
    {
        @Html.AntiForgeryToken()

        <dl class="dl-horizontal">
            <dt>
                @Html.Label("Scan Drug UPC")
            </dt>
            <dd>
                @Html.Kendo().MaskedTextBoxFor(x => x.UPC).Mask("000000000000").PromptChar("-").HtmlAttributes(new {@id="UPC_textbox"})
            </dd>
        </dl>

    }

</div>

我遇到的问题是,当我提交表单时,会填写UPC属性,但ASNID将返回null / default。我可以在页面中找到一个断点,看到ASNID设置得当,但在提交时丢失了。我做错了什么?

1 个答案:

答案 0 :(得分:3)

当您提交表单时,它会使用表单内输入的值填充请求表单数据。

您在表单上的唯一输入是UPC字段的输入。

您需要添加一个输入,将您的其他字段(ASNID)存储在表单中。我假设您不想向用户显示此值,因此您可以使用隐藏字段。

@model TIMS.Models._DrugScan

@*@Scripts.Render("~Scripts/ScanDrugPost.js")*@

<div>
    @using (Html.BeginForm("DrugScan", "Receive", FormMethod.Post, new { @class = "form-horizontal", role = "form"}))
    {
        @Html.AntiForgeryToken()

        @Html.HiddenFor(x => x.ASNID)

        <dl class="dl-horizontal">
            <dt>
                @Html.Label("Scan Drug UPC")
            </dt>
            <dd>
                @Html.Kendo().MaskedTextBoxFor(x => x.UPC).Mask("000000000000").PromptChar("-").HtmlAttributes(new {@id="UPC_textbox"})
            </dd>
        </dl>

    }

</div>