显示:没有字段未发布到控制器

我有一个灯箱,其中包含一堆输入元素,我使用HTML帮助程序为创建操作设置了这些元素。 它们是可选字段,但我在jqueryvalidation中将数字规则应用于它们。

用户可以打开此灯箱,并根据需要填写字段,但不是必需的。 它与其他数据的格式相同,但要提交,他们必须关闭此灯箱。

在提交时,不会将灯箱中的值发布到控制器。 如果我从灯箱中删除输入,它可以正常工作。 它必须与隐藏它有关,但为什么会发生这种情况呢? 是jquery吗? 我有’voavi-ignore’作为我的忽略类,所以它仍然应该validation这些。 因为我已经有一段时间了,所以我对此感到困惑和焦虑。 我页面上的其他所有内容都运行良好,我只是将这些新字段添加到灯箱中。

JS:

$(document).ready(function () { InitTab(); $("#caseProductions").hide(); $(".chzn-select").chosen(); $(".filetypes").click(OnNewVOAVIClick); $(".countPerCase").change(OnCaseProdChange); $(".caseCount").change(OnCaseProdChange); $(".drinkWindow").change(OnDrinkWindowChange); $("#lnkCaseProduction").click(OnCaseProdOpen); VintageUpAlert(); $.validator.addMethod("decimalNumber", function (value, element) { return this.optional(element) || (!isNaN(value)); }, "Must be a valid number"); wineValidator = $("form").validate({ errorPlacement: function (error, element) { var x = element.parent(); error.appendTo(element.closest("td")); }, ignore: ".voavignore", rules: { "Wine.VarTypeID": { min: 1 }, "Wine.OriginID": { min: 1 }, "Wine.AppID": { min: 1 }, "Wine.VintageID": { min: 1 }, "VOAVIRequest.VarType": { required: true }, "VOAVIRequest.Origin": { required: true }, "VOAVIRequest.App": { required: true }, "VOAVIRequest.Vintage": { required: true }, "Wine.CaseProduction": { digits: true }, "Wine.AlcoholContent": { number: true, min: 0, max: 100 }, "Wine.pH": { number: true, min: 0, max: 7 }, "Wine.RS": { decimalNumber: true, min: 0, max: 1000 } }, messages: { "Wine.VarTypeID": { min: "Varietal/Type Required" }, "Wine.OriginID": { min: "Origin Required" }, "Wine.AppID": { min: "Appellation Required" }, "Wine.VintageID": { min: "Vintage Required" }, "VOAVIRequest.VarType": { required: "Varietal/Type Required" }, "VOAVIRequest.Origin": { required: "Origin Required" }, "VOAVIRequest.App": { required: "Appellation Required" }, "VOAVIRequest.Vintage": { required: "Vintage Required" }, "Wine.CaseProduction": { digits: "Please enter whole numbers only" } } }); CaseProdValidation(); }); function CaseProdValidation() { $(".caseCount").rules("add", { digits: true }); } 

html(这只是lighbox,其余的相当多的标记):

  

实际上是浏览器决定display:none应该发布display:none字段(除了type="hidden"之外,它们永远不会显示)。

一个广泛使用的技巧是使用定位隐藏字段:

CSS:

 input.hideThisField { position:absolute; top: -9999px; visibility:hidden; } 

但在您的情况下,问题是您的表单字段位于灯箱内,在提交表单之前(显然)已关闭。 这不行。 您必须在表单提交时保持灯箱打开,或者在灯箱关闭后使用JavaScript自己提取表单内容。

我可能会选择只保持灯箱打开,直到表格被张贴)。