【问题标题】:Partial View model data missing on form submit表单提交时缺少部分视图模型数据
【发布时间】:2015-05-08 04:42:06
【问题描述】:

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

 <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 恢复为空/默认值。我可以在页面中打断点并查看 ASNID 是否已正确设置但在提交时丢失。我做错了什么?

【问题讨论】:

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


【解决方案1】:

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

您在表单上的唯一输入是 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>

【讨论】:

  • Ohhhh... 我认为它会提交作为表单数据上下文的整个模型。本来想试试隐藏域的,没想到这么简单……原来是这样,谢谢!
  • @user1278533:在继续之前,您可能需要了解一些有关 HTML 表单的知识。 ASP.NET MVC 不像 ASP.NET Webforms 那样隐藏 HTML 的工作原理,所以你需要知道发生了什么。
猜你喜欢
  • 2015-12-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-06
  • 1970-01-01
相关资源
最近更新 更多